我需要找到一种方法来了解如何以秒为单位生成时间戳,该时间戳表示1970年之前的日期与当前时间之间的时间间隔。
X人生日1969-01-02
2013-08-23当天
我试过
<?php
$then = new DateTime("1969-01-02");
$age = $then->getTimestamp();
?>
给我一个减去时间戳直到1970年。
我也做了日期差异
<?php
$then = new DateTime("1969-01-02");
$now = new DateTime("now");
$age = $then->diff($now);
?>
但我不知道如何将日期差异转换为我可以使用的秒时间戳。有什么帮助吗?
我问的原因是,当相对于现在在1970年之后的日期执行时间戳时,它工作正常并给出预期的输出。但是,如果有人生日是在1970年之前,它只计算他们的出生日期到1970年的时间戳,这是完全不准确的。所以我需要找到一种方法来获得1970年以前出生日期的人的年龄时间戳。
答案 0 :(得分:0)
这是预期的行为。
UNIX timestamp
是自Jan 1 1970
以来的秒数(不考虑闰秒)。对于之前的日期,它会return
负数。
是的,如果你想计算years, months and days
,那就试试吧,
<?php
$then = new DateTime("1969-01-02");
$now = new DateTime('now');
$age = $then->diff($now);
echo $age->format('%Y years, %m months,%d days');
?>
已更新,
<?php
$then = strtotime("1969-01-02");
$now = strtotime('now');
$age=$now-$then;
// Above is your final time stamp, created by the difference of two dates
$diff = abs($age);
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
// Outputs-> 44 years, 8 months, 4 days
?>