【问题标题】:DateTime class and $obj->diff() issue calculating ageDateTime 类和 $obj->diff() 问题计算年龄
【发布时间】:2022-12-09 05:53:33
【问题描述】:

在家谱网站(php/MySQL)上,今天生日的人在欢迎页面上,并提到他们的年龄

我正在使用此代码,其中 $ddn 是出生日期(DateTime 对象):

$datenow = new DateTime();
$age = $ddn->diff($datenow)->format('%Y');

一般没问题,年龄合适。

但我今天发现,我的爷爷,100 年前的 12 月 3 日出生。 1922年,据说是99岁。

我试图将出生日期更改为不同的值,并得到这些计算出的年龄:

Date of birth (Y-m-d) Age
1952-12-03 70
1942-12-03 80
1941-12-03 81
1940-12-03 82
1939-12-03 82
1938-12-03 83
1932-12-03 89
1922-12-03 99

在 1940-12-03 之前一切正常,如果出生日期早些就会出错。

在 1939 年和 1940 年之间发生了什么,以至于 1940 年之前出生的人的每个计算年龄都变成错误的?

如何解决?

谢谢

【问题讨论】:

    标签: php datetime


    【解决方案1】:

    也许你可以检查你的服务器日期时间,我已经在我的本地计算机上试过了,1939-12-03 返回 83,1940-12-03 返回 82。

    如果服务器日期时间正确,请检查时区的 PHP 配置,或者如果您使用的是 Laravel,则可以在配置/app.php.

    【讨论】:

      【解决方案2】:

      感谢您的回答

      我在 Windows 上将 UwAmp 作为本地服务器运行以进行编码,在线网站托管在 Linux 服务器 (Ionos 1&1) 上。问题出现在两台服务器上。所以好像不是php配置的问题。

      但是你对时区的关注是对的:在我的 php 代码中,我试图改变

      date_default_timezone_set('Europe/Paris');
      

      date_default_timezone_set('UTC');
      

      ...然后修复了它。

      所以这对我来说没问题,但是......有谁知道 Europe/Paris timezone 有什么问题吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-26
        • 1970-01-01
        • 2021-06-02
        • 2020-12-28
        • 2016-03-20
        相关资源
        最近更新 更多