如何查找日期是否为有效日期,且不超过2038年?

时间:2010-04-30 15:06:20

标签: php date

我有一个网站,用户提供一些日期,但如果他们进入年份,如2099年4月12日,那么我过去的日期(1969年)。如何检查并应用默认的最大安全日期?

谢谢你。

2 个答案:

答案 0 :(得分:5)

尝试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

不确定DateTime在内部使用什么来存储时间戳而不是整数。但是整数受限于您的平台PHP_INT_MAX的值。您可以使用'U'(对于时间戳)格式化日期时间并将其传递给date()来测试:

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

请注意DateTime如何返回正确的时间戳,但date无法使用它:

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 :(得分:0)

您可以使用mktime功能。如果它提供了从Fri, 13 Dec 1901 20:45:54 GMTTue, 19 Jan 2038 03:14:07 GMT的日期,则会从epoch返回秒数,然后返回false

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