webForumDet fria alternativet

Problem med konvertering av tid till UNIX_TIMESTAMP

PHP

9 svar · 1 521 visningar · startad av lillebror

Medlem sedan apr. 20041 597 inlägg
Frågan#1

Hej,

Jag stöter på patrull när jag försöker konvertera foruminlägg med tidsformatet "2007-08-20 00:52:49" till UNIX_TIMESTAMP() som sedan sparas i vBulletindatabasen som ett INT-tal.

När jag läser tidsstämpeln i vBulletin för den importerade posten så är värdet följande:

2007-08-19 22:52. Här ser man tydligt att det finns en diff i tiden. Vad kan jag ha missat?

Följande kod har jag i SQL-satsen:

UNIX_TIMESTAMP('".$array['posted']."')
Medlem sedan okt. 2000149 inlägg
#2

Vår kära sommartid brukar ge upphov till sådana roliga differanser

Medlem sedan juni 20008 205 inlägg
#3

Låter som ett tidszonsfel, datumet du får in är svensk tid (UTC+2h) men UNIX_TIMESTAMP tror antagligen att det är UTC. Du kan prova med UNIX_TIMESTAMP(CONVERT_TZ('".$array['posted']."', 'CET', 'GMT')) men det kommer paja om din kod körs i en annan tidszon. Vore kanske bättre att göra konverteringen i PHP.
http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html#function_convert-tz

Medlem sedan mars 20041 505 inlägg
#4

Resultaten av datum-funktionerna baseras på aktuell tidszon.
Precis som med teckenkodning kan man ange tidszon för kopplingen.
Kör detta uttryck precis när du öppnar mysql-kopplningen så blir det svensk tidszon för allt:

SET time_zone = 'Europe/Stockholm';
Medlem sedan apr. 20041 597 inlägg
#5

Troxy skrev:

Resultaten av datum-funktionerna baseras på aktuell tidszon.
Precis som med teckenkodning kan man ange tidszon för kopplingen.
Kör detta uttryck precis när du öppnar mysql-kopplningen så blir det svensk tidszon för allt:

SET time_zone = 'Europe/Stockholm';

Det fungerade inte med den tidszon som du angav. Var kan jag hitta en lista över samtliga zoner? Jag testade att söka på MySQL utan resultat.

Skickar jag in den här SQL-satsen med tidszonen innan jag kör mitt INSERT-statement för inläggen?

Medlem sedan juni 20008 205 inlägg
#6

lillebror skrev:

Det fungerade inte med den tidszon som du angav. Var kan jag hitta en lista över samtliga zoner? Jag testade att söka på MySQL utan resultat.

På sidan jag länkade till... ;)

Manualen skrev:

Note

To use named time zones such as 'MET' or 'Europe/Moscow', the time zone tables must be properly set up. See Section 9.7, “MySQL Server Time Zone Support” , for instructions.

Men undvik att hårdkoda värdet för tidszonen, det kommer ställa till problem när du minst behöver det.

Medlem sedan mars 20041 505 inlägg
#7

lillebror skrev:

Skickar jag in den här SQL-satsen med tidszonen innan jag kör mitt INSERT-statement för inläggen?

I början av koden där du öppnar mysql-kopplingen.

Medlem sedan apr. 20041 597 inlägg
#8

Troxy skrev:

I början av koden där du öppnar mysql-kopplingen.

Att det inte fungerade första gången berodde på att de fem tabeller i MySQL-databasen som har med tidzoner att göra var tomma.

Jag gick in på MySQL:s hemsida och tankade ner ett paket med de senaste tidszonerna som jag kopierade in i databasen.

Testade att köra med båda varianterna:

1. SET time_zone = 'Europe/Stockholm';
2. UNIX_TIMESTAMP(CONVERT_TZ('".$array['posted']."', 'CET', 'GMT'))

Tiden diffar fortfarande fel. Den visar två timmar för lite mot vad den ska göra.

Några idéer på vad jag kan testa ytterligare?

Medlem sedan apr. 20041 597 inlägg
#9

Av någon konstig anledning så fungerar det helt plötsligt med tiden. Den stämmer. Jag vet inte riktigt vad jag har gjort. Skumt. Men jag är nöjd med resultatet :)

Medlem sedan apr. 20041 597 inlägg
#10

Hej,

Migreringsarbetet lades på is. Därför aktualiserar jag den här frågan igen. För nu fungerar tidskonverteringen inte helt plötsligt

Vad gör jag för fel i koden? Det diffar på en timme.

256 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)