我正在尝试使用strtotime计算给定月份的第一个星期三,但是只要第一个星期三恰好落在第一个星期三,“第一个星期三”的论点就会失败。
有关此问题的更一般说明,请参阅以下代码和结果:
$mon = strtotime("December 2010 first monday");
$tue = strtotime("December 2010 first tuesday");
$wed = strtotime("December 2010 first wednesday");
$thu = strtotime("December 2010 first thursday");
$fri = strtotime("December 2010 first friday");
$sat = strtotime("December 2010 first saturday");
$sun = strtotime("December 2010 first sunday");
echo strftime("%m/%d/%y", $mon) . "<br>";
echo strftime("%m/%d/%y", $tue) . "<br>";
echo strftime("%m/%d/%y", $wed) . "<br>";
echo strftime("%m/%d/%y", $thu) . "<br>";
echo strftime("%m/%d/%y", $fri) . "<br>";
echo strftime("%m/%d/%y", $sat) . "<br>";
echo strftime("%m/%d/%y", $sun) . "<br>";结果如下:
12/06/10
12/07/10
12/08/10
12/02/10
12/03/10
12/04/10
12/05/10注意到什么了吗?一周中的某一天不应该和这个月的第一天重合吗?但它从来没有这样做过,而是在8号返回当天的第二个实例。
有人对此有什么解释吗?
发布于 2010-12-05 13:37:55
我没有任何解释,因为我也很眼花缭乱,但我设法找出了如何通过省略"first“获得正确的日期,如下所示:
$ php -r 'echo date("m/d/y", strtotime("December 2010 Wednesday"));'
12/01/10
$ php -r 'echo date("m/d/y", strtotime("December 2010 Thursday"));'
12/02/10
$ php -r 'echo date("m/d/y", strtotime("December 2010 Friday"));'
12/03/10
$ php -r 'echo date("m/d/y", strtotime("December 2010 Saturday"));'
12/04/10
$ php -r 'echo date("m/d/y", strtotime("December 2010 Sunday"));'
12/05/10
$ php -r 'echo date("m/d/y", strtotime("December 2010 Monday"));'
12/06/10
$ php -r 'echo date("m/d/y", strtotime("December 2010 Tuesday"));'
12/07/10发布于 2010-12-08 01:40:27
根据提供的答案,需要注意php 5.2和php 5.3在相对日期格式上的差异。
测试:
$date1 = strtotime("first wednesday of 2010-12");
$date2 = strtotime("first wednesday 2010-12");
$date3 = strtotime("wednesday 2010-12");5.2结果:
1969-12-31
2010-12-08
2010-12-015.3结果:
2010-12-01
2010-12-08
2010-12-01因此,只有第三个方法在PHP5版本中返回正确的结果。
发布于 2010-12-05 16:55:24
只是你的格式不正确。您需要包含of
echo strftime("%m/%d/%y", strtotime("first Monday of December 2010"));
echo strftime("%m/%d/%y", strtotime("first Tuesday of December 2010"));
echo strftime("%m/%d/%y", strtotime("first Wednesday of December 2010"));
echo strftime("%m/%d/%y", strtotime("first Thursday of December 2010"));
echo strftime("%m/%d/%y", strtotime("first Friday of December 2010"));
echo strftime("%m/%d/%y", strtotime("first Saturday of December 2010"));
echo strftime("%m/%d/%y", strtotime("first Sunday of December 2010"));打印:
12/06/10
12/07/10
12/01/10
12/02/10
12/03/10
12/04/10
12/05/10被接受的解决方案可以工作,但如果你想找到第二个工作日,你会遇到问题:
echo strftime("%m/%d/%y", strtotime("December 2010 second Wednesday"));打印:
12/15/10文档中给出了一些示例:
http://www.php.net/manual/en/datetime.formats.relative.php
上述文档中的第二段说明解释了of如何影响日期计算过程:
还观察到,“序号空间”中的"of“和”最后一个空间“中的”of“做了一些特殊的事情。
https://stackoverflow.com/questions/4357490
复制相似问题