【问题标题】:php - date reset to 1970 at 2038 while adding in a loop [duplicate]php - 在循环中添加时,日期在 2038 年重置为 1970 [重复]
【发布时间】:2016-06-03 12:33:55
【问题描述】:

我一直在尝试根据用户在我的基于 PHP 的 Web 应用程序中提供的一些整数值生成年份和月份列表。这样做时,我遇到了 2038 年的错误,当循环到达 2038 年时,这一年被重置为 1970 年。我使用的 PHP 版本是 5.4,我用谷歌搜索并应用了在这个 link 中找到的解决方案,但它不起作用对我来说,有没有人为 php 中的 2038 错误尝试过其他解决方案?

这是我的 PHP 代码:

 $i = 1;
 $Tenurein = 360;
 while ($i < $Tenurein) {
    $MonthArr[] = date('F', strtotime($date2));
    $YearArr[] = date('Y', strtotime($date2));
    $date = new DateTime($date2);
    $date->add(new DateInterval('P1M'));
    $dateMon = $date->format('Y-m-d');
    $date2 = $dateMon;
    $i++;
}

【问题讨论】:

  • 这是一个众所周知的问题en.wikipedia.org/wiki/Year_2038_problem
  • 正确,但是 PHP 中有什么解决方法可以解决这个问题吗?
  • 使用 DateTime 对象,可以处理更少/更多的 unix 时间戳

标签: php datetime year2038


【解决方案1】:

我使用的是 php 版本 5.6。下面的代码产生输出 View output

<?php
$i = 1;
 $Tenurein = 360;
 $date2 = date('Y-m-d');
 while ($i < $Tenurein) {
    $MonthArr[] = date('F', strtotime($date2));
    $YearArr[] = date('Y', strtotime($date2));
    $date = new DateTime($date2);
    $date->modify('+1 month');
    echo $dateMon = $date->format('Y-m-d');
    $date2 = $dateMon;
    $i++;
    echo "<br>";
}
?>

我们可以看到很多关于这个问题的帖子。对于显示日期,似乎没有问题。但是在存储在数据库中时,我也面临同样的问题。如果您使用时间戳数据类型,只需更改为日期时间。它会起作用的。

【讨论】:

  • 问题是我错过了在其他一些地方将strtotime 更改为DateTime,现在它正在工作,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 2015-06-26
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 2017-01-16
相关资源
最近更新 更多