我正在尝试使用chartist JS脚本来填充图表。 我需要在过去的一周内一直显示条目。但我想在“过去一周,前两天,昨天和今天”中将它们分开。
当我从数据库中获取所有条目时,有一个包含日期时间的字段,我想找到一种灵活的方法来比较上述每种情况并显示或不显示。
尝试了类似的事情,
$entrydate = explode(' ', $entry['datetime'])[0];
if (date('Y-m-d', strtotime('-7 days', strtotime($entrydate)))) {
echo 'past week';
} else if (date('Y-m-d', strtotime('-2 days', strtotime($entrydate)))) {
echo '2 days ago';
} else if (date('Y-m-d', strtotime('-1 days', strtotime($entrydate)))) {
echo 'yesterday';
} else {
echo 'today'; //...
}
但没有用。
答案 0 :(得分:2)
今天:
date("Y-m-d");
昨天:
date("Y-m-d", strtotime("yesterday"));
7天前: 日期(" Y-m-d",strtotime(" -7天"));
上周一:
date("Y-m-d", strtotime("last Monday"));
找到与另一天相关的昨天...
$yesterday = date("Y-m-d", strtotime("2014-12-31") - 86400);
$sevendaysago = date("Y-m-d", strtotime("2014-12-31") - 7*86400);
答案 1 :(得分:2)
我不会将日期转换为其文字表示。相反,我会使用时间戳和数组来匹配时间戳到文本。
类似的东西:
$times = array(
86400 => 'yesterday',
172800 => 'two days ago'
// etc
);
$time = strtotime($entrydate);
if ( $time < (time() - 172800) ) {
echo $times[172800];
} elseif ( $time < (time() - 86400) ) {
echo $times[86400];
}
// etc.
你可以在一个循环中或更智能地执行此操作以避免所有重复,但这是一般的想法。
答案 2 :(得分:1)
您可以使用 DateTime 对象。我发现 DateInterval 非常有用。
$yourDate = "2014-12-28"; // The date to compare
$now = new DateTime(date("Y-m-d"));
$from = new DateTime($yourDate);
$diff = $now->diff($from);
$diffByDays = $diff->days;
switch($diffByDays) {
case 7:
// One Week
break;
case 1:
// Yesterday
break;
default:
break;
}
print_r($ diff)的结果:
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 3
[h] => 0
[i] => 0
[s] => 0
[invert] => 1
[days] => 3
)
答案 3 :(得分:0)
date()将在成功时返回一个字符串,在失败时返回FALSE。 IF语句和ELSE IF语句不会评估为TRUE并打印所需的结果。如果不运行代码,我希望它只打印最终的ELSE条件。
答案 4 :(得分:0)
date( "Y-m-d", strtotime( "today" ) );
date( "Y-m-d", strtotime( "today -2 days" ) );
date( "Y-m-d", strtotime( "today -7 days" ) );
date( "Y-m-d", strtotime( "today -15 days" ) );
date( "Y-m-d", strtotime( "today -1 month" ) );
)