转换PHP计算的日期格式


Converting Date Format for Calculations in PHP

我正在以m/d/y格式显示任务的截止日期。我在"posted X$name(s)ago"(例如"posted 6天前")中显示任务发布的日期。

我正在为时间戳(发布和截止日期)提供不同的CSS类,这取决于从今天到截止日期还有多少天。(所以"Posted X"时间戳不太相关,我只是想给出一个更好的图片。)

到目前为止,我有以下内容:

$cdate = $this->data['due'];
$today = time();
$dovi = date('m/d/Y', $today);
$difference = $cdate - $dovi;
$upcoming= floor($difference/60/60/24);

$cdate正在从数据库中提取到期日期,格式为m/d/y$today告诉我们今天是什么(使用UNIX时间戳)$dovi正在将时间()转换为m/d/y格式$差异告诉我们今天和预产期之间的差异$理论上,即将推出的产品应该将这种差异简化为一个简单的数字。

我认为要使计算工作,我需要将$cdate转换为UNIX时间戳,或者以某种方式将$today和$cdate都转换为m/d/y以外的其他匹配格式。

有人对这项工作的最佳方式有什么建议吗?我已经有了一些代码来运行CSS更改,唯一困扰我的是这个转换/计算问题,以确定从现在起(time())截止日期是多少天。谢谢!!

也许是这样的?假设$this->数据["ue"]为m/d/Y格式。

$this->data['due'] = '7/28/2012';
$diff = strtotime($this->data['due']) - strtotime(date('m/d/Y'));
var_dump(date('d',$diff)); // 3

您可以将任何有效的参数传递给php的日期函数,使其按照您的意愿进行格式化。

它很长,但有效。。。

    $datetime = new DateTime("2012-07-22 02:03:50");   // your date in datetime type
    $curr_stamp = time();
    $act_stamp = mktime($datetime->format('H'), $datetime->format('i'), $datetime->format('s'), $datetime->format('n'), $datetime->format('j'), $datetime->format('Y'));
    $diff=$curr_stamp-$act_stamp;
    $day_diff = floor($diff / 86400);
    if($day_diff < 7)
        echo $day_diff." days ago";

相当优雅和正确的解决方案(在UNIX epoch结束后也是可行的)。

$today = new DateTime(); // creating `today` DateTime object
$expiry = DateTime::createFromFormat('m/d/Y', $this->data['due']) // creating DateTime object from already formatted date
$difference = $today->diff($expiry); // 1st variant to calculate difference between dates
$difference = date_diff($today, $expiry); // and 2nd variant
echo $difference->format('Interval (difference) is %R% days');

请记住,UNIX epochtimestamp)将"很快"结束,基于时间戳的代码可能会面临一些问题(也许我们将来会找到解决方案来避免这种情况,但…),最好使用DateTime类bec。如果你不记得1970.01.01的日期并试图使用时间戳来计算1970年之前出生的人的年数,那么即使是计算1970年之前出生的年数也会成为一个问题(这是广泛的数据库实践BTW:))。

永远不要为非常古老的日期做这件事(时间戳),并展望未来,DateTime将拯救我们的灵魂