使用strtotime在1970年之前的日期

Ctr*_*roy 10 php mysql

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

date("F j, Y", strtotime($row['value']));
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ker 14

从以下文档strtotime():

strtotime()在格林尼治标准时间1901年12月13日20:45:54和格林威治标准时间2038年1月19日星期二03:14:07之间的范围限制; 虽然在PHP 5.1.0之前,但在某些操作系统(Windows)上,此范围仅限于01-01-1970至19-01-2038.

您运行的是哪个版本的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");
Run Code Online (Sandbox Code Playgroud)

OOP:

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

echo $date->format("F j, Y");
Run Code Online (Sandbox Code Playgroud)


You*_*nse 1

你应该使用date专栏,而不是文本。
date_format()SQL 函数来格式化查询中的日期

  • 日期完全没有问题。以及我写的解决方案。如果你在一列中有不同类型的数据,那么你的整个数据库的机器人就已经毁了它。没有解决办法,只会让你陷入灾难 (2认同)