2009-05-22 4 views
1

Cela fonctionne très bien en PHPY a-t-il un équivalent de `date_default_timezone_set()` de PHP qui fonctionne dans MySQL?

date_default_timezone_set('my/timezone'); 

$actualDate = date('Y-m-d'); 

Maintenant, quand faire des requêtes, j'aime faire

INSERT INTO articles (title, insert_date) VALUES ('My Title', now()) 

Le problème est le now() dans MySQL est différent de ce qu'il serait si elle avait été calculé en PHP (et donc contre le fuseau horaire en cours de définition).

Existe-t-il un moyen, disons une requête SQL, de définir le fuseau horaire par défaut pour MySQL?

Merci

+0

Que pensez-vous de cela? Si votre système ne possède pas de base de données zoneinfo (par exemple, Windows ou HP-UX), vous pouvez utiliser le package de tables de fuseaux horaires prédéfinis disponibles pour téléchargement sur MySQL Developer Zone: http: // dev.mysql.com/downloads/timezones.html –

+0

J'ai téléchargé ces ... mais je ne sais pas quoi faire avec eux ... Je me sens comme un noob cet après-midi: S – alex

+0

J'abandonne pour l'instant ... Je vient de faire date_time :: getIsoDateTime(): P – alex

Répondre

3

http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html

If you have the SUPER privilege, you can set the global server time zone value at runtime with this statement:

mysql> SET GLOBAL time_zone = timezone;

Per-connection time zones. Each client that connects has its own time zone setting, given by the session time_zone variable. Initially, the session variable takes its value from the global time_zone variable, but the client can change its own time zone with this statement:

mysql> SET time_zone = timezone;

+0

Merci Paolo; Où puis-je obtenir une liste des fuseaux horaires acceptés? Merci :) – alex

+0

"Les valeurs autorisées pour --timezone ou TZ dépendent du système Consultez la documentation de votre système d'exploitation pour voir quelles valeurs sont acceptables." –

+0

Je suppose que tout ce que PHP est capable d'utiliser MySQL serait en mesure d'utiliser ... http://www.php.net/manual/en/timezones.php –

1

Quelque chose que vous pouvez essayer est de stocker toutes vos dates/heures en UTC. Donc, vous devez utiliser

date_default_timezone_set('UTC'); 
$actualDate = date('Y-m-d'); 

et

INSERT INTO articles (title, insert_date) VALUES ('My Title', UTC_TIMESTAMP()) 

Ensuite, vous convertir la date UTC/heure pour le fuseau horaire de l'utilisateur avant de l'afficher.

+0

Cela ressemble à un bon façon de le faire, mais le site est lié à sa localisation. Mais je vais certainement considérer cela dans le futur +1 – alex

0

Je règle généralement le serveur MySQL à l'heure de Greenwich, puis j'utilise gmdate au lieu de date en PHP. Conserve tout dans GM Time, donc si vous passez à un autre serveur, ou si vous en avez 2 dans des fuseaux horaires différents, les choses ne se foiront pas.

Questions connexes