php - 根据实际年份的周+月生成新日期
问题描述
我正在开发一个具有固定间隔的日历。但是有2个假期,年中和年末。年中假期从该实际年份的 7 月 3° 星期一开始,年终假期从该实际年份 12 月的倒数第二个星期一开始。
有什么方法可以获取或生成这个假期日期?
我发现的最接近的是这样的
$mid_vacation= date('w',strtotime($my_date.'Monday last week'));
解决方案
可能有更多的方法,但遵循所有的条款都可以按需要工作。我不认为实例化一个日期类对象具有吸引力,因为在生成字符串之后您不需要任何额外的功能。因此,我建议strtotime()
使用date()
. 您可以根据“可读性”、“简洁性”或任何标准自由选择您想要的表达方式。
代码:(演示)
echo "3rd Monday of July: " , date("Y-m-d", strtotime("first Monday of July +2 weeks"));
echo "\n";
echo "3rd Monday of July: " , date("Y-m-d", strtotime("+2 weeks first Monday of July"));
echo "\n";
echo "3rd Monday of July: " , date("Y-m-d", strtotime("third Monday of July"));
echo "\n---\n";
echo "Penultimate / Second last Monday in December: " , date("Y-m-d", strtotime("last Monday of December this year -1 week"));
echo "\n";
echo "Penultimate / Second last Monday in December: " , date("Y-m-d", strtotime("-1 week last Monday of December"));
输出:
3rd Monday of July: 2019-07-15
3rd Monday of July: 2019-07-15
3rd Monday of July: 2019-07-15
---
Penultimate / Second last Monday in December: 2019-12-23
Penultimate / Second last Monday in December: 2019-12-23
this year
*December在第一个表达式中似乎需要;@fyrye 告诉我们为什么......
问题
December
是由于使用last|first dayname of
when using+
或-
因为它假设您正在指定时区。参见关于相对语句的注释总是在非相对语句之后处理。您可以-7 days last Monday of December
改用https://3v4l.org/KBrEs0
– fyrye