首页 > 解决方案 > 根据实际年份的周+月生成新日期

问题描述

我正在开发一个具有固定间隔的日历。但是有2个假期,年中和年末。年中假期从该实际年份的 7 月 3° 星期一开始,年终假期从该实际年份 12 月的倒数第二个星期一开始。

有什么方法可以获取或生成这个假期日期?

我发现的最接近的是这样的

$mid_vacation= date('w',strtotime($my_date.'Monday last week'));

标签: php

解决方案


可能有更多的方法,但遵循所有的条款都可以按需要工作。我不认为实例化一个日期类对象具有吸引力,因为在生成字符串之后您不需要任何额外的功能。因此,我建议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 ofwhen using+-因为它假设您正在指定时区。参见关于相对语句的注释总是在非相对语句之后处理。您可以-7 days last Monday of December改用https://3v4l.org/KBrEs0
fyrye


推荐阅读