6

我正在拉一些推文,我很想输出它们是今天、昨天还是在那之前出现的。这是我正在使用的代码(不起作用)。它跳过ifelse 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 日

关于我的代码哪里出错的任何想法?谢谢!

4

2 回答 2

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() — 格式化本地时间/日期。返回根据给定格式字符串格式化的字符串,使用给定的整数时间戳或当前时间(如果没有给出时间戳)。换句话说,timestamp 是可选的,默认为 的值time()

你哪里出错了?

您应该首先将格式然后时间戳传递给date()函数。阅读更多

于 2013-01-09T16:06:38.290 回答
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()该函数将时间戳与时间戳进行比较。

于 2013-01-09T16:43:24.237 回答