2010-04-30 7 views

Répondre

5

Essayez les DateTime cours

$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 

Je ne sais pas ce que DateTime utilise en interne pour stocker l'horodatage au lieu de Entiers. Mais les entiers sont limités par la valeur de votre plate-forme pour PHP_INT_MAX. Vous pouvez tester cela avec le formatage de la datetime avec « U » (pour l'horodatage) et le passage à date():

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

Remarquez comment DateTime renvoie l'horodatage correct, mais date ne peut pas travailler avec elle:

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

Qui, pour utiliser plus de mots, signifie «ne fonctionne pas avec les horodatages». :) –

+0

Merci Gordon, j'essaie de comprendre ce cours. – user187580

+0

@ user187580 Si vous n'êtes pas à l'aise avec les classes, vous pouvez également utiliser les équivalents procéduraux. Par exemple 'date_create',' date_format', etc. – Gordon

0

Vous pouvez utiliser la fonction mktime. Si son fourni avec une date de Fri, 13 Dec 1901 20:45:54 GMT à Tue, 19 Jan 2038 03:14:07 GMT il renvoie le # de secondes de l'époque, il renvoie false.

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