在PHP中转换计算的日期格式

时间:2012-07-25 19:33:48

标签: php time

我以m / d / y格式显示任务的截止日期。我显示了任务发布在"发布的X $名称之前的日子" (例如。" 6天前发布")。

我正在努力为时间戳(已发布和截止日期)提供不同的CSS类,具体取决于从今天到截止日期的天数。 (所以"发布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将time()转换为m / d / y格式。 $差异告诉我们今天和到期日之间的区别。从理论上讲,即将到来的,应该采用这种差异并将其简化为一个简单的数字。

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

有没有人对这项工作的最佳方法有什么建议?我已经有了一些代码来运行CSS更改,我唯一坚持的是这个转换/计算问题,以确定从NOW(time())到期日的天数。谢谢!

3 个答案:

答案 0 :(得分:3)

也许是这样的?假设$ this-> data ['due']采用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的日期函数,以便按照您的意愿对其进行格式化。

答案 1 :(得分:0)

它很长,但有效...

    $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";

答案 2 :(得分:0)

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

$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纪元timestamp)将“很快”“结束”,基于时间戳的代码可能会遇到一些问题(也许我们将来会找到解决方案要避免这种情况,但...... ),最好使用DateTime类,因为。如果你不记得日期 1970.01.01 并尝试使用时间戳来计算,那么即使计算1970年以前出生年的人的年数也会变得有点问题(它是广泛的数据库实践BTW :))。

永远不会(很久以前的时间戳),展望未来,DateTime将会收到SaveOurSouls。