内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

PHP获取周一 上个月的正确做法

2018-06-02 18:18 出处:清屏网 人气: 评论(0

如果你理所当然地认为在 PHP 中获取周一,上周一,上个月,下个月这些时间能简单地用 strtotime() 函数来获取的话,那你就大错特错了!

$now = strtotime('2018-01-31');
echo date('Y-m-d', strtotime('+1 month', $now)) . "\n";

输出的结果是:

2018-03-03

并不是期望的返回2月份的某一天,而返回了错误的3月份。为什么呢?这和 strtotime() 的实现原理有关:

  • 将月份加1,就变成了 2018-02-31
  • 因为2月没有31号,所以修正,从 2018-02-28 再往前加3天

类似的,星期相关的代码也有问题。

$now = strtotime('2018-05-20'); // 这一天是周日
echo date('Y-m-d', strtotime('this monday', $now)) . "\n";

输出的结果是:

2018-05-21

按中国人的理解,输出的结果错了,那是下一个周一,而不是本周一。这主要是 strtotime() 是按某些地区的理解来实现的,这些地区认为周日是一周的开始。但中国人,还有 ISO-8601 标准认为,周一才是一周的开始。

由于 strtotime() 采用了非标准的(错误的)理解,所以导致上周一,下周一,上一周,下一周这些结果对于中国人来说是错误的。

所以,获取本周一的正确方式是:

$now = strtotime('2018-05-20');
$time = $now - 86400 * (date('N', $now) - 1);
echo date('Y-m-d', $time) . "\n"; // 2018-05-14

strtotime('-3 week', $time); // 先求出本周一,再以本周一的时间为基准求3周以前的那个周一

分享给小伙伴们:
本文标签: PHP

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号