Nyári időszámítás

rss.sql:

CREATE TABLE `rss` (
`date` datetime NOT NULL
);

rss.php:

<?php
$rows = mysql_query ( "SELECT `id`, `title`, `link`, `description`, DATE_FORMAT ( date, '%a, %e %b %Y %T' ) as `date2` FROM `" . $this -> data [ 'database' ] [ 'mysql' ] [ 'table' ] . "` ORDER BY `date` DESC LIMIT " . ( int ) $this -> data [ 'main' ] [ 'limit' ] ) or die ( $this -> error ( 12, mysql_error () ) );
while ( $row = mysql_fetch_array ( $rows ) ) {
$foo .= "<item><pubDate>" . $row [ 'date2' ] . " GMT+2</pubDate></item>";
}
?>

Nyári időszámítás figyelőt hogyan lehetne beépíteni?

Hozzászólások

Adott dátum típusú cella értékét akarod aktuális időzóna szerint kiírni?

  1. PHP date() függvény formatja elfogad olyat, hogy e, O, p.
  2. Javaslom a CONVERT_TZ MySQL függvényt. Fontos, hogy amikor dátumot tárolsz le, egy adott időzónába konvertáld (lehetőleg UTC), s azt onnan minden user saját időzónájába fogod tudni külön kín nélkül (melyik user melyik időzónában mentette).
  3. https://web.ivy.net/~carton/rant/MySQL-timezones.txt

Használd a UTC_TIMESTAMP-ot a mindenkori UTC időért, majd UI időben átkonvertálod a kedves vevő aktuális időzónájára. Ez nálunk egyszerű, de pl USA-belieknek ugye helyből 4+1 időzónájuk van.

Köszönöm a segítséget. Az alapján amit írtál:

  1. Az adatbázisban minden dátumot átkonvertáltam (UTC).
  2. Közép-európai idő (MySQL):
    SELECT CONVERT_TZ ( `date`, '+00:00', '" . date ( 'P' ) . "' ) as `date2` FROM `foo`
  3. RSS 2.0 <pubDate> (PHP):
    $date = date ( 'r', strtotime ( $row [ 'date2' ] ) );

A date ( 'P' ) függvény használatával (+02:00) a kiszolgáló vagy a látogató időzónáját kapjuk meg? Nekem az utóbbira lenne szükségem. A @@session.time_zone (MySQL) ugyanaz mint a date ( 'P' ) (PHP)?

A MySQL időzónája és a PHP-t futtató szerver időzónája nem feltétlenül ugyanaz, mert 1) nem biztos hogy ua gép 2) igen, a session.time_zone-t módosíthatja valami, amit esetleg nem is látsz.

Azt javaslom, hogy php oldalon döntsd el, melyik időzóna kell, s vagy azt adod meg time_zone-nak, vagy php oldalon konvertáld, amelyik könnyebb. De csak az egyik helyen tegyed. Esetleg irj egy function-t, aminek ket parameter van, egy datetime ami utc, es egy timezone, igy nem kell minden query-be beegetni a convert_tz-t.

- A MySQL időzónája és a PHP-t futtató szerver időzónája nem feltétlenül ugyanaz...
- Igaz. Ha a date ( 'P' ) és a @@session.time_zone a kiszolgáló időzónáját mondja meg, akkor ezek nem is kellenek.

- Azt javaslom, hogy php oldalon döntsd el, melyik időzóna kell...
- A látogató időzónáját csak IP alapján tudom meghatározni?

A date() gondolom PHP (azaz a webszerver), a @@session.* meg MySQL.
Mint mások is mondták már, ez a két gép nem kötelezően van egyáltalán ugyanazon kontinensen.

A látogatót meg vagy valami geoip-vel kérdezed le, vagy ha regisztrált user, akkor megkérdezed tőle az elején, hogy melyik időzóna, á la hup ;-)

readme (js): http://stackoverflow.com/a/1809974

Novemberben a date ( 'P' ) PHP függvény kimenete nem +02:00 hanem +01:00?

A MySQL adatbázisban tárolt adatok (UTC):

  1. 08:00
  2. 10:00

Ha most kérdezem le az adatokat közép-európai idő szerint (UTC+2/CEST):

  1. 10:00
  2. 12:00

Ha október után kérdezem le az adatokat közép-európai idő szerint (UTC+1/CET):

  1. 09:00
  2. 11:00

Az óraátállítás az UTC szerint hajnali 1 órakor történik, vagyis Magyarországon márciusban helyi idő szerint 2 órakor előre, októberben 3 órakor vissza kell állítani az órákat. - Wikipédia

Kérdés: Novemberben egy júniusi időpont, júniusban egy novemberi időpont hibásan fog megjelenni?

Hát, fenn ülsz a szopórolleren...
Miután nekiálltam gondolkodni (nem triviális, 2 kv kellett hozzá), rájöttem, hogy a MySQL nem ad kulcsrakész megoldást a timezone tárolásához. Ahhoz pedig, hogy te egy UTC dátumból kitaláld, hogy melyik időzóna, ahhoz az is kell, hogy melyik országra vonatkozik (pl usában máskor van a DST átállás). Ergo, csak kénytelen leszel

  1. stringként tárolni a dátumot TZ-vel (ekkor cpu-igényesebb a dátumra/intervallumra keresés), vagy
  2. a datetime mellé elrakni egy tinyint-et, amiben a differencia van (ez utóbbit nem javaslom, mert van ahol töredék órák is vannak, pl India: UTC+05:30, Nepál UTC+05:45), és a lekérdezésben matekozni.

Mindkettő szívás. De ez van. Esetleg Írsz egy MySQL plugin-t, ami ad új datatype-ot, ami már kezeli az időzónát is...

Unix timestamp? Afaik, nem érdekli sem az időzóna, sem a téli-nyári időszámítás. Php oldalon pedig jól kezelhető.

Értem mire gondolsz. Azt írja, hogy az epoch UTC-ben nézett időpontjához mennyi idő telt el. De azt nem, hogy a mostani időt miben nézi. A CET és a CEST között meg 3600 másodperc difi van... Ergo tudnod kell, melyik időzóna szerinthez nézed az eltérést másodpercben.
"The server interprets date as a value in the current time zone and converts it to an internal value in UTC." current time zone, azaz @@session.time_zone. Ugyanott vagyunk.

janoszen irt errol itt.
--
1 leszel vagy 0 élő vagy hulla!