繁体   English   中英

根据实际年份的周+月生成新日期

[英]Generate new date based on week+month of actual year

我正在开发一个固定间隔的日历。 但是在年中和年末有2个假期。 年中假期从该年的7月的星期一开始,而年末假期从该年的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

* 12月似乎需要在第一this year中进行; @fyrye告诉我们为什么...

December的问题是由于使用+-时使用了last|first dayname of因为它假定您指定了时区。 请参阅有关相对语句的注释, 始终在非相对语句之后进行处理 您可以-7 days last Monday of December使用-7 days last Monday of December而不是https://3v4l.org/KBrEs0
菲尔耶

检查DateTime类

https://www.php.net/manual/en/class.datetime.php

$test = new DateTime('2019-07-01');
echo $test->modify('first monday')->format('Y-m-d');

$test = new DateTime('2019-12-01');
echo $test->modify('last monday of this month')->format('Y-m-d');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM