查找过去一周,两天前,昨天和今天的PHP日期

时间:2014-12-31 15:05:04

标签: php date

我正在尝试使用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'; //...
}

但没有用。

5 个答案:

答案 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"));

strtotime documentation

找到与另一天相关的昨天...

$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" ) );