将日期差异转换为从1970年之前的日期开始的时间戳,相对于现在。 PHP

时间:2013-08-23 10:48:02

标签: php date datetime unix-timestamp date-difference

我需要找到一种方法来了解如何以秒为单位生成时间戳,该时间戳表示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年以前出生日期的人的年龄时间戳。

1 个答案:

答案 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 
?>