2010-04-30 10 views

Antwort

5

Versuchen Sie, die DateTime Klassen

$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 

nicht sicher, was Datetime verwendet intern den Zeitstempel zu speichern, anstatt ganzer Zahlen. Aber Ganzzahlen sind durch den Wert Ihrer Plattform für PHP_INT_MAX begrenzt. Sie können dies testen mit der Formatierung der Datetime mit ‚U‘ (für Zeitstempel) und Übergabe an date():

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

Beachten Sie, wie DateTime den richtigen Zeitstempel gibt aber date kann es nicht funktionieren:

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

Welche, um mehr Wörter zu verwenden, bedeutet "nicht mit Zeitstempeln arbeiten." :) –

+0

Dank Gordon, ich versuche, meinen Kopf um diese Datetime-Klasse zu bekommen. – user187580

+0

@ user187580 für den Fall, dass Sie mit Klassen unwohl fühlen, können Sie auch die verfahrenstechnischen Äquivalente verwenden. Zum Beispiel 'date_create',' date_format', usw. – Gordon

0

Sie können die mktime Funktion verwenden. Wenn sie mit einem Datum von Fri, 13 Dec 1901 20:45:54 GMT bis Tue, 19 Jan 2038 03:14:07 GMT versehen ist, gibt sie die Anzahl der Sekunden aus der Epoche zurück, sonst gibt sie false zurück.

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