2010-06-09 17 views
7

In .net, ci sono le proprietà statiche DateTime.MinDate, and DateTime.MaxDate che restituiscono convenientemente le date di validità minima e massima per un oggetto DateTime.php/mysql/javascript mindate e maxdate

Mi sto dilettando in programmazione Web in questo momento, utilizzando php + mysql + javascript. Non sembrano essere gli stessi convenienti valori min/max date in quell'ambiente di programmazione? Ad esempio, il valore massimo di un oggetto data in mysql è 9999-12-31, ma la funzione php strtotime() non ama quel valore.

Desidero una data minima per la lingua incrociata (da utilizzare per indicare "non ancora impostato", ad esempio) e una data massima per la lingua incrociata (da utilizzare per indicare "buono per sempre"). Ciò significa che potrebbero esserci le date min e le date massime memorizzate in un database, che php recupererebbe (e dovrebbe differenziare tra date "normali" e date min/max), e alla fine verrebbero ridotte a qualche javascript (che , di nuovo dovrebbe differenziare tra date "normali" e date min/max).

Quindi, quale valore di data si utilizza per le date min/max quando si lavora in php + mysql + javascript? E come si fa a memorizzare queste costanti - sarebbe bello per definirli in un solo luogo e li hanno essere disponibili in ciascuna delle php + mysql + javascript ...

Grazie

risposta

2

mi limiterò a rispondi alla parte PHP della domanda. Secondo il PHP date() documentation:

L'intervallo valido di un timestamp è tipicamente da Fri, 13 dicembre 1901 20:45:54 GMT a mar, 19 gen 2038 03:14:07 GMT. (Queste sono le date che corrispondono ai valori minimo e massimo per un intero con segno a 32 bit)

PHP utilizza 32 valori bit integer per rappresentare data/ora - che significa che è possibile utilizzare il PHP_INT_MAX costante per derivare la valori interi associati alle min/max date:

echo date('m/d/Y G:i:s', PHP_INT_MAX + 1); // minimum valid date 
echo date('m/d/Y G:i:s', PHP_INT_MAX); // maximum valid date 

USCITA:

12/13/1901 15:45:52

01/18/2038 22:14:07

Non sono sicuro del motivo per cui è scaduto di 2 secondi alla data minima citata, ma si ottiene l'idea generale.

+0

Sembra che il formato di data a 32 bit di php sia il fattore limitante (rispetto a mysql e javascript), quindi sembra che questo sia quello da utilizzare.Tipo di schifo, il 2038 non è molto lontano. – Jimmy

12

Per il lato JavaScript, il range is a lot bigger:

La data viene misurato in millisecondi dalla mezzanotte 1 gennaio 1970 UTC. Un giorno contiene 86.400.000 millisecondi. L'intervallo di oggetti Date è compreso tra -100.000.000 giorni e 100.000.000 di giorni rispetto al 01 gennaio 1970 UTC.

Così si potrebbe fare questo nel tuo JavaScript:

var min_date = new Date(-100000000*86400000); 
var max_date = new Date(100000000*86400000); 
+1

+1. La tua costante 8640000000000000 è esattamente corretta; 1 oltre ti dà una data non valida in entrambe le direzioni. –

+1

P.S. Lo sviluppatore di Javascript deve conoscere le differenze di fuso orario nella creazione e nel recupero delle date. –

0

Per il 'non ancora impostato' valore logico, forse un valore nullo è meglio.

+0

Sì, a volte va bene, ma nel mio caso particolare, posso considerare 'non impostato' come una data nel passato. Mi piacerebbe scegliere una data coerente nel passato, e una sorta di mindate funzionerebbe bene. Di nuovo, questo è specifico per la mia situazione, ma in questo caso, un mindate funzionerebbe meglio di una data nulla. – Jimmy

Problemi correlati