2010-04-30 18 views

Respuesta

5

Pruebe las clases DateTime

$dt = new DateTime('2099-01-01'); 
$dt->setTime(23,59); 
$dt->add(new DateInterval('P10D')); 
echo $dt->format('Y-m-d H:i:s'); // 2099-01-11 23:59:00 

No estoy seguro que DateTime utiliza internamente para almacenar la fecha y hora en lugar de números enteros. Pero los enteros están limitados por el valor de su plataforma para PHP_INT_MAX. Esto se comprueba con el formato de fecha y hora con la 'U' (por fecha y hora) y se lleva a date():

echo date('Y-m-d H:i:s', $dt->format('U')); // 1962-12-06 17:30:44 

Note como DateTime devuelve la fecha y hora correcta, pero date no se puede trabajar con él:

var_dump(
    $dt->format('U'),       // 4071855540 
    date('U', $dt->format('U')),    // -223111756 
    PHP_INT_MAX,        // 2147483647 
    PHP_INT_MAX+1,        // -2147483648 
    date('Y-m-d H:i:s', PHP_INT_MAX),   // 2038-01-19 04:14:07 
    date('Y-m-d H:i:s', PHP_INT_MAX+1)  // 1901-12-13 21:45:52 
); 
+1

Que, para usar más palabras, significa "no funciona con marcas de tiempo". :) –

+0

Gracias Gordon, estoy tratando de entender esta clase de fecha y hora. – user187580

+0

@ user187580 en caso de que se sienta incómodo con las clases, también puede usar los equivalentes de procedimiento. Por ejemplo 'date_create',' date_format', etc. – Gordon

0

Puede usar la función mktime. Si está provisto de una fecha desde Fri, 13 Dec 1901 20:45:54 GMT hasta Tue, 19 Jan 2038 03:14:07 GMT, devuelve el n. ° de segundos de epoch, de lo contrario devuelve false.

var_dump(mktime(0, 0, 0, 1, 19, 2038)); // int(2147472000) 
var_dump(mktime(0, 0, 0, 1, 20, 2038)); // bool(false) 
Cuestiones relacionadas