2010-06-09 15 views
7

En .net, están las propiedades estáticas DateTime.MinDate, and DateTime.MaxDate que devuelven convenientemente las fechas válidas mínimas y máximas para un objeto DateTime.php/mysql/javascript mindate y maxdate

Estoy incursionando en la programación web en este momento, usando php + mysql + javascript. No parece haber los mismos valores convenientes min/max date en ese entorno de programación? Por ejemplo, el valor máximo de un objeto de fecha en mysql es 9999-12-31, pero a la función php strtotime() no le gusta ese valor.

Me gustaría una fecha mínima en varios idiomas (que se usará para indicar 'no establecido todavía' por ejemplo), y una fecha máxima en varios idiomas (que se utilizará para indicar 'bueno para siempre'). Eso significa que podría haber esas fechas mínimas y fechas máximas almacenadas en una base de datos, que php recuperaría (y tendría que diferenciar entre las fechas 'normales' y la fecha mínima/máxima), y eventualmente llegarían a algún javascript (que , de nuevo tendría que diferenciar entre las fechas 'normales' y la fecha min/max).

Entonces, ¿qué valor de fecha usa para las fechas min/max cuando se trabaja en php + mysql + javascript? ¿Y cómo se almacena estas constantes - que sería bueno para definirlas en un solo lugar y hacer que estén disponibles en cada una de php + mysql + javascript ...

Gracias

Respuesta

2

sólo voy responde la parte PHP de la pregunta. De acuerdo con la PHP date() documentation:

El rango válido de una marca de tiempo es típicamente de Vier 13 Dic 1901 20:45:54 GMT a mar 19 Ene 2038 03:14:07 GMT. (Estas son las fechas que corresponden a los valores mínimo y máximo para un entero de 32 bits)

PHP utiliza 32 valores de bits enteros para representar fecha/hora - que significa que puede utilizar el PHP_INT_MAX constante para obtener la valores enteros asociados con las min/max fechas:

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 

SALIDA:

12/13/1901 15:45:52

01/18/2038 22:14:07

No estoy seguro de por qué está apagado en 2 segundos en la fecha mínima que se cita, pero se entiende la idea general.

+0

Parece que el formato de fecha de 32 bits de php es el factor limitante (en comparación con mysql y javascript), por lo que parece que este es el que se debe usar.Tipo de sucks, 2038 no está muy lejos. – Jimmy

12

Por el lado de JavaScript, el range is a lot bigger:

La fecha se mide en milisegundos desde la medianoche 01 de enero de, 1970 UTC. Un día contiene 86,400,000 milisegundos. El rango del objeto Fecha es de -100,000,000 días a 100,000,000 días con relación al 1 de enero de 1970 UTC.

Por lo que podría hacer esto en su JavaScript:

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

+1. Su constante 8640000000000000 es exactamente correcta; 1 beyond le da una fecha inválida en ambas direcciones. –

+1

P.S. El desarrollador de Javascript debe conocer las diferencias de zona horaria en la creación y recuperación de fechas. –

0

Para el 'aún no establecido' valor lógico, tal vez un valor nulo es mejor.

+0

Sí, algunas veces está bien, pero en mi caso particular, puedo tratar 'no establecido' como una fecha en el pasado. Me gustaría elegir una fecha coherente en el pasado, y algún tipo de actualización funcionaría bien. De nuevo, esto es específico para mi situación, pero en este caso, una fecha mínima funcionaría mejor que una fecha nula. – Jimmy

Cuestiones relacionadas