2010-04-30 14 views

risposta

5

provare il DateTime classi

$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 

Non so cosa DateTime utilizza internamente per memorizzare il timestamp anziché interi. Ma gli Integers sono limitati dal valore della tua piattaforma per PHP_INT_MAX. È possibile verificare questo con la formattazione del datetime con 'U' (per timestamp) e passarlo al date():

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

Notate come DateTime restituisce il timestamp corretti ma date non può lavorare con esso:

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

Che, per usare più parole, significa "non utilizzare i timestamp". :) –

+0

Grazie Gordon, sto cercando di capire come funziona questa classe datetime. – user187580

+0

@ user187580 nel caso in cui ti senti a disagio con le classi, puoi anche utilizzare gli equivalenti procedurali. Per esempio 'date_create',' date_format', ecc. – Gordon

0

È possibile utilizzare la funzione mktime. Se è fornito con una data da Fri, 13 Dec 1901 20:45:54 GMT a Tue, 19 Jan 2038 03:14:07 GMT, restituisce il numero di secondi da epoch else restituisce false.

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