php - 对 1970 年之前的日期使用 strtotime

标签 php mysql

我在 mysql 中有一个文本列,它以 yyyy-mm-dd 格式存储一个日期值。 现在,在我的 php 页面中,我使用此代码解析为日期值。

date("F j, Y", strtotime($row['value']));

现在,我刚刚读到 strtotime() 仅在 1970 年 1 月 1 日之后解析值。我在该日期之前有很多日期值。有解决办法吗?我不想改变我的数据库结构。

最佳答案

来自documentation for strtotime() :

strtotime() has a range limit between Fri, 13 Dec 1901 20:45:54 GMT and Tue, 19 Jan 2038 03:14:07 GMT; although prior to PHP 5.1.0 this range was limited from 01-01-1970 to 19-01-2038 on some operating systems (Windows).

您运行的是什么版本的 PHP?在什么平台上?也许是时候升级了。

如果您要处理 1901 年 12 月 13 日到 2038 年 1 月 19 日范围之外的日期,请考虑使用 PHP 的 DateTime 对象,它可以处理范围更广的日期。

程序:

$date = date_create($row['value']);
if (!$date) {
    $e = date_get_last_errors();
    foreach ($e['errors'] as $error) {
        echo "$error\n";
    }
    exit(1);
}

echo date_format($date, "F j, Y");

面向对象:

try {
    $date = new DateTime($row['value']);
} catch (Exception $e) {
    echo $e->getMessage();
    exit(1);
}

echo $date->format("F j, Y");

关于php - 对 1970 年之前的日期使用 strtotime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2871264/

相关文章:

mysql - 如何循环访问同一个表中的值?

php - php代码验证和rowcnt工作正常时遇到麻烦

PHP opencart查询出数据

php - 第二个 while 循环没有运行。为什么?

php - 从 Zend 表单元素中清除验证错误消息

php - 显示表中的记录?

PHP & MySQL 不更新数据库

mysql - SQL 乘车共享公司

php - 更改磁盘上的文件时,如何防止 phpstorm 在没有提示的情况下重新加载文件?

php - 在 AngularJs 中使用 MySQL 和 PHP 嵌套 JSON 数据 | ng选项