PHP日期问题

时间:2009-06-25 14:01:59

标签: php date

我正在尝试使用PHP中的日期进行一些数学运算。我正在修改一个shoutbox,我想实现以下功能。


如果发布日期=今天,则返回发布时间

否则如果date =昨天,则返回“昨天”

其他日期= X天前


我如何使用php的日期函数来计算时间戳的天数(时间戳在UNIX时间格式化)

6 个答案:

答案 0 :(得分:8)

试试这个:

$shoutDate = date('Y-m-d', $shoutTime);
if ($shoutDate == date('Y-m-d'))
    return date('H:i', $shoutTime);

if ($shoutDate == date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - 1, date('Y'))))
    return 'yesterday';

return gregoriantojd(date('m'), date('d'), date('y')) - gregoriantojd(date('m', $shoutTime), date('d', $shoutTime), date('y', $shoutTime)) . ' days ago';

答案 1 :(得分:3)

在php 5.3.0或更高版本中,您可以使用DateTime::diff(又名date_diff())。

在几乎所有的PHP中,您都可以将日期转换为Unix时间戳,并将它们之间的差异除以86400(1天秒)。

答案 2 :(得分:3)

使用时间以秒存储的事实:

 $days = floor(($shoutTime - time()) / 86400) + 1; // 86400 = 24*60*60

 switch ($days) { 
   case 0:
     return date('H:i', $shoutTime);
   case -1:
     return 'yesterday';
   case 1:
     return 'tomorrow';
 }

 return "$days ago";

答案 3 :(得分:1)

我认为没有人指出您可以使用 strtotime 来获取“昨天”。与“手动”计算日期相比,它使可读(并且更容易记住),并且可能不太容易出错。

$ int = strtotime('昨天');


if(date('Y-m-d', $shoutTime) == date('Y-m-d') {
    return date('H:i:s', $shouTime);
} elseif(date('Y-m-d', $shoutTime) == date('Y-m-d', strtotime('Yesterday')) {
    return "Yesterday.";
} else {
  $days = floor($shoutTime - time() / 86400);
  return "$days ago.";
}

答案 4 :(得分:0)

使用DateTime类,然后你有一个方法diff

答案 5 :(得分:0)

尝试使用date_parse 从手册:

<?php
print_r(date_parse("2006-12-12 10:00:00.5"));
?> 

将打印

Array
(
    [year] => 2006
    [month] => 12
    [day] => 12
    [hour] => 10
    [minute] => 0
    [second] => 0
    [fraction] => 0.5
    [warning_count] => 0
    [warnings] => Array()
    [error_count] => 0
    [errors] => Array()
    [is_localtime] => 
)