昨天的日期 PHP date

129
3个回答

233

date()本身只用于格式化,但它接受第二个参数。

date("F j, Y", time() - 60 * 60 * 24);

为了简单起见,我只是从 Unix 时间戳中减去了 24 小时。

现代的面向对象编程方法是使用 DateTime

$date = new DateTime();
$date->sub(new DateInterval('P1D'));
echo $date->format('F j, Y') . "\n";

在你的情况下(更易读/明显)
$date = new DateTime();
$date->add(DateInterval::createFromDateString('yesterday'));
echo $date->format('F j, Y') . "\n";

因为这里的 DateInterval 是负数,所以我们必须在这里 add() 它。

另请参阅:DateTime::sub()DateInterval


3
非常好的答案,有许多种方法可以做到这一点,但你选择了简单明了的方式,短小易懂(对于那些想要使用更多内存的人来说,还有面向对象编程的方法 ;))。 - neofutur
3
除了"我们想浪费我们的 RAM"之外,面向对象的方法还是很有用的,当你已经有一个 DateTimeDateInterval 对象(或两者都有)时,这种方法就显得非常实用,而这在基于面向对象的应用程序中可能会出现(例如 $customer->expire->add(DateInterval::createFromDateString('+1 year'))//客户支付了额外一年的费用)。请注意,DateInterval 理解 ISO8601 的时间间隔,但 date() 则不理解。最后,当然:选择更适合你需求的方法 :) - KingCrunch
13
这不是正确的答案!夏令时会让一些天有23个小时或25个小时,因此这并不能给出正确的答案,一年中也不止两个小时的差别。 - patrick
3
@patrick 有趣的观点 :) 是的,你是对的,但这只适用于第一个解决方案,而不是后面使用DateInterval的解决方案。 - KingCrunch
$yesterday = strtotime("-1 day", $today); 昨天 = strtotime(“-1天”,今天); - nerkn
2
不要忘记在命名空间的上下文中使用\DateTime\DateInterval - Thomas Kekeisen

145

strtotime()函数,例如:date("F j, Y", strtotime("yesterday"));


14
+1 是为了在浏览代码时更明显地表达意图。自我记录的代码等等。 - Justin ᚅᚔᚈᚄᚒᚔ

111

多么容易啊 :)

date("F j, Y", strtotime( '-1 days' ) );

示例:

echo date("Y-m-j H:i:s", strtotime( '-1 days' ) ); // 2018-07-18 07:02:43

输出:

2018-07-17 07:02:43

6
我更喜欢这个答案。偏移量(“-1”)不必是一个固定的常数:它可以用一个变量甚至一个循环来构建:strtotime('-'.$s.' days'),其中 $s 是你想要回溯多少天(或前进如果改变符号)的天数。 - Henry
我需要五天前的代码,所以这个最容易修改。 - omikes
1
使用Y-m-d代替ISO标准日期中的Y-m-j,因为j没有前导零。 - toster-cx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接