0

我以 m/d/y 格式显示任务的截止日期。我在“发布 X $name(s) ago”中显示任务发布的日期(例如,“Posted 6 day(s) ago”)。

我正在努力为时间戳(发布日期和截止日期)提供不同的 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 正在将 time() 转换为 m/d/y 格式。$difference 告诉我们今天和到期日之间的差异。从理论上讲,$upcoming 应该把这种差异化为一个简单的数字。

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

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

4

3 回答 3

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 的 date 函数,以便按照您的意愿对其进行格式化。

于 2012-07-25T19:36:38.877 回答
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";
于 2012-07-25T19:45:30.520 回答
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 epoch ( timestamp) 将“很快”“结束”,基于时间戳的代码可能会遇到一些问题(也许我们将来会找到解决方案来避免这种情况,但是......),最好使用DateTimeclass,bec . 如果您不记得日期1970.01.01并尝试使用时间戳来计算1970 年之前出生的人的年数,甚至会成为一个问题(顺便说一句,这是广泛的数据库实践:))。

永远不要为非常古老的日期这样做(时间戳),并展望未来,DateTime并将 SaveOurSouls。

于 2012-07-25T22:24:02.803 回答