如何获得一周开始和结束的完整跨度


How to get a full span of the start and end of a week

我试图找到一个简单的解决方案来获取日期范围,特别是一周的开始到一周的结束。

我在这里找到了一些非常复杂的解决方案。 我想要一个双线解决方案。我认为我的解决方案可能会帮助某人,所以我发布了它。

$date = new 'DateTime(/* any point in time and space */);
$week_start = new 'DateTime(sprintf('%s today this week',           $date->format('Y-m-d H:i:s')));
$week_end   = new 'DateTime(sprintf('%s today next week -1 second', $date->format('Y-m-d H:i:s')));
echo sprintf('%s -> %s', $week_start->format('Y-m-d H:i:s'), $week_end->format('Y-m-d H:i:s'));

PHP迄今为止的英语表达式中一个经常被忽视的功能是如何在看似冲突的表达式中相互继承单词和日期。

但是,您可以添加多个表达式,每个表达式都将继承上一个表达式。因此,通过添加特定日期并在表达式开头设置其格式,您可以添加today以获取该日期的开始。

之后this week得到一周的开始,继承自相同的,加上today,所以this week的开始变成了that week的开始。

对于结束日期,我以相同的原理使用了next week,但之后-1 second应用,这给了我们一周的第一秒和最后一秒。

相同结果的另一种方法:-

$sunday = 0;
$monday = 1;
$date = new 'DateTime(/* any point in time and space */);
$weekStart = (new 'DateTime())->setISODate((int)$date->format('o'), (int)$date->format('W'), $monday)->setTime(0, 0, 0);
$weekEnd = (new 'DateTime())->setISODate((int)$date->format('o'), (int)$date->format('W') + 1, $sunday)->setTime(23, 59, 59);
echo sprintf('%s -> %s', $weekStart->format('Y m d H:i:s'), $weekEnd->format('Y m d H:i:s'));

就个人而言,我更喜欢这种类型的方法,而不是传递"自然语言"类型的字符串,对我来说,这具有模棱两可的含义。