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?
- 9867 megtekintés
Hozzászólások
Adott dátum típusú cella értékét akarod aktuális időzóna szerint kiírni?
- PHP date() függvény formatja elfogad olyat, hogy e, O, p.
- 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).
- 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.
- A hozzászóláshoz be kell jelentkezni
Köszönöm a segítséget. Az alapján amit írtál:
- Az adatbázisban minden dátumot átkonvertáltam (UTC).
- Közép-európai idő (MySQL):
SELECT CONVERT_TZ ( `date`, '+00:00', '" . date ( 'P' ) . "' ) as `date2` FROM `foo`
- 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 hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
- 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 hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Novemberben a date ( 'P' )
PHP függvény kimenete nem +02:00 hanem +01:00?
A MySQL adatbázisban tárolt adatok (UTC):
- 08:00
- 10:00
Ha most kérdezem le az adatokat közép-európai idő szerint (UTC+2/CEST):
- 10:00
- 12:00
Ha október után kérdezem le az adatokat közép-európai idő szerint (UTC+1/CET):
- 09:00
- 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?
- A hozzászóláshoz be kell jelentkezni
Te most TIME-ot értelmezel DATE nélkül?
- A hozzászóláshoz be kell jelentkezni
- Te most TIME-ot értelmezel DATE nélkül?
- DATETIME.
Adatbázis:
- 2012-04-18 08:00
- 2012-04-18 10:00
Adatbázisból, most lekérdezve:
- 2012-04-18 10:00
- 2012-04-18 12:00
Adatbázisból, október után lekérdezve:
- 2012-04-18 09:00
- 2012-04-18 11:00
- A hozzászóláshoz be kell jelentkezni
hát ez szívás. majd utánanézek.
- A hozzászóláshoz be kell jelentkezni
Előre is köszönöm.
- A hozzászóláshoz be kell jelentkezni
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
- stringként tárolni a dátumot TZ-vel (ekkor cpu-igényesebb a dátumra/intervallumra keresés), vagy
- 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...
- A hozzászóláshoz be kell jelentkezni
na? mit választottál?
- A hozzászóláshoz be kell jelentkezni
Írni fogok egy PHP függvényt/osztályt. Jövőhét elején kezdem fejleszteni. A dátumok maradnak úgy ahogy voltak az adatbázisban (UTC/DATETIME).
- A hozzászóláshoz be kell jelentkezni
Hogy tervezed? egy DATETIME, ami UTC-re van konvertálva és egy másik mező, ami az időzónát tárolja?
- A hozzászóláshoz be kell jelentkezni
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ő.
- A hozzászóláshoz be kell jelentkezni
a junix ts is aktualis idobol van,nem utc.
- A hozzászóláshoz be kell jelentkezni
Úgy tudtam, UTC; a mysql-doksiban is úgy tűnik.
- A hozzászóláshoz be kell jelentkezni
É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.
- A hozzászóláshoz be kell jelentkezni
janoszen irt errol itt.
--
1 leszel vagy 0 élő vagy hulla!
- A hozzászóláshoz be kell jelentkezni