我正在尝试使用PHP中的日期进行一些数学运算。我正在修改一个shoutbox,我想实现以下功能。
如果发布日期=今天,则返回发布时间
否则如果date =昨天,则返回“昨天”
其他日期= X天前
我如何使用php的日期函数来计算时间戳的天数(时间戳在UNIX时间格式化)
答案 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] =>
)