2013-02-13 19 views
6

Ho un blog in cui gli utenti possono commentare. Inserisco l'ora in cui hanno pubblicato un commento utilizzando NOW() e quindi utilizzare date('j M Y', stored timestamp) per mostrare l'ora in cui sono stati pubblicati.Differenza tra UNIX_TIMESTAMP e NOW() in MySQL

Desidero sapere che NOW() restituisce locatime of the end user or the localtime at my server. È meglio utilizzare UNIX_TIMESTAMP di NOW() per calcolare l'ora locale in cui gli utenti hanno pubblicato un commento.

+0

[questo] (http://stackoverflow.com/questions/9613944/timestamp-means) potrebbe aiutare – RMH

risposta

3

La funzione NOW() genera una stringa di data e ora formattata, determinata dal fuso orario del server MySQL.

Tuttavia, sarebbe meglio per memorizzare volte utilizzando UNIX_TIMESTAMP(), che si esprime in GMT. In questo modo è più semplice formattarlo in base al Paese di un visitatore (ad esempio, utilizzando JavaScript).

Se si desidera utilizzare ancora le colonne DATETIME, è possibile memorizzare le ore utilizzando UTC_TIMESTAMP() (formatta una data come NOW() ma la esprime in UTC); dovrebbe più o meno funzionare allo stesso modo in tutti gli altri aspetti.

+0

così ora come faccio a calcolare il paese di utente che utilizza Javascript. So calcolare il valore gmt ma come il paese @Jack – sanchitkhanna26

+0

stamperebbe la data in base al paese dell'utente 'date ('j M Y', timestamp memorizzato)' – sanchitkhanna26

+0

'UNIX_TIMESTAMP()' restituisce un intero. Stai suggerendo di scaricare le colonne 'DATETIME' a favore di' INT'? –

1

Vediamo ciò che il manuale ha da dire su NOW():

Restituisce la corrente data e l'ora come valore in 'AAAA-MM-GG HH: MM: SS' o YYYYMMDDHHMMSS.uuuuuu formato, a seconda che la funzione sia utilizzata in una stringa o in un contesto numerico. Il valore è espresso nel fuso orario corrente .

... e UNIX_TIMESTAMP():

Se chiamato con nessun argomento, restituisce un timestamp Unix (secondi dal '1970-01-01 00:00:00' UTC) come un intero senza segno. Se UNIX_TIMESTAMP() viene chiamato con un argomento data, restituisce il valore dell'argomento come secondi da "1970-01-01 00:00:00" UTC. la data può essere una stringa DATE, una stringa DATETIME, un TIMESTAMP o un numero nel formato YYMMDD o YYYYMMDD. Il server interpreta data come un valore nel fuso orario corrente e lo converte in un valore interno in UTC.

Quindi, per cominciare, restituiscono cose diverse: una data corretta rispetto a un numero intero.

hai veramente bisogno di ottenere tre caratteristiche:

  1. Conservare tutte le date nello stesso formato (sia UTC o il fuso orario del server)
  2. Ottenere il fuso orario dell'utente
  3. display data memorizzata nel tempo dell'utente zona

Il capitolo Date and Time functions offre un riepilogo delle funzioni disponibili. Se desideri memorizzare le date in UTC, scegli UTC_TIMESTAMP().Se si desidera utilizzare il fuso orario del server, è possibile utilizzare NOW(). E c'è lo CONVERT_TZ() per fare le conversioni.

MySQL, tuttavia, non vi aiuterà con il punto 2. Devi chiedere all'utente o usare JavaScript per leggere l'orologio dell'utente e inviarlo al server in modo da poter indovinare (se non lo chiedi dovrai sempre indovinare perché di solito ci sono più fusi orari che condividono lo stesso tempo in un dato istante).

+0

Grazie @Alvari G. Vicario – sanchitkhanna26

5

MySQL UNIX_TIMESTAMP() restituisce un timestamp Unix in secondi da '1970-01-01 00:00:00' UTC come un numero intero senza segno, se non argomenti vengono passati con UNIT_TIMESTAMP().

Quando questa funzione utilizzata con l'argomento oggi, restituisce il valore dell'argomento come un numero intero senza segno in secondi dal '1970-01-01 00:00:00' UTC.

L'argomento può essere un DATE, DATETIME, TIMESTAMP o un numero in YYYYMMDD o YYMMDD.

Nota: poiché UNIX_TIMESTAMP() funziona con datetime corrente, l'output potrebbe variare rispetto all'output visualizzato.

NOW() restituisce la data e l'ora correnti.

SELECT NOW(), UNIX_TIMESTAMP(NOW()); 
+---------------------+-----------------------+ 
| NOW()    | UNIX_TIMESTAMP(NOW()) | 
+---------------------+-----------------------+ 
| 2011-10-03 10:22:37 |   1317666157 | 
+---------------------+-----------------------+