我正在提供一些推文,我很乐意输出他们是否在今天,昨天或之前进来。这是我正在使用的代码(不起作用)。它正在跳过 if 和 else if 并直接转到 else 。
date_default_timezone_set("America/New_York");
$time = $block["created_at"];
$time = strtotime($time);
if(date("now") == date("m-d-Y", $time)) {
$time = date("g:ia", $time);
}
else if(date(strtotime("-1 day")) == date("m-d-Y", $time)) {
$time = "Yesterday at" + date("g:ia", $time);
}
else {
$time = date("m-d-Y g:ia", $time);
}
绝对理想情况下,如果时间戳在过去的6天内,它会显示星期几和时间,并且比这更早的任何内容都会显示日期,我也会喜欢它。
因此,流可能看起来像这样(日期按降序排序):
[...]上午9:53 [...]上午7:02
[...]昨天晚上11点24分 [...]星期一下午3:45
[...] 2013年1月2日
知道我的代码出错了吗?谢谢!
答案 0 :(得分:6)
您的代码应该如下所示。
if(date("m-d-Y") == date("m-d-Y", $time)) {
$time = date("g:ia", $time);
}
else if(date("m-d-Y", strtotime("-1 day")) == date("m-d-Y", $time)) {
$time = "Yesterday at" + date("g:ia", $time);
}
else {
$time = date("m-d-Y g:ia", $time);
}
的说明强> 的
date() - 格式化本地时间/日期。使用给定的整数时间戳返回根据给定格式字符串格式化的字符串,如果没有给出时间戳,则返回当前时间。换句话说,时间戳是可选的,默认值为time()
。
你哪里出错?
您应该首先将格式传递给date()
函数的时间戳。 Read more
答案 1 :(得分:2)
strtotime
函数可以解析各种字符串:
echo date("D Y-m-d H:i:s"); // Wed 2013-01-09 21:33:07
echo date("D Y-m-d H:i:s", strtotime("today 00:00" )); // Wed 2013-01-09 00:00:00
echo date("D Y-m-d H:i:s", strtotime("yesterday 00:00")); // Tue 2013-01-08 00:00:00
echo date("D Y-m-d H:i:s", strtotime("-6 day 00:00" )); // Thu 2013-01-03 00:00:00
echo date("D Y-m-d H:i:s", strtotime("-100 day 00:00" )); // Mon 2012-10-01 00:00:00
您现在需要做的就是按降序比较给定的时间戳和上面的时间戳:
function formatDate($time) {
if ($time >= strtotime("today 00:00")) {
return date("g:i A", $time);
} elseif ($time >= strtotime("yesterday 00:00")) {
return "Yesterday at " . date("g:i A", $time);
} elseif ($time >= strtotime("-6 day 00:00")) {
return date("l \\a\\t g:i A", $time);
} else {
return date("M j, Y", $time);
}
}
echo formatDate(time()); // 9:42 PM
echo formatDate(strtotime("-1 day")); // Yesterday at 9:42 PM
echo formatDate(strtotime("-6 day")); // Thursday at 9:42 PM
echo formatDate(strtotime("-100 day")); // Oct 10, 2012
请注意strtotime()
返回时间戳(整数),而date()
返回字符串。该函数将时间戳与时间戳进行比较。