星期四的strtotime虫子?

时间:2011-10-22 23:06:06

标签: php date strtotime

首先,我要做的是获取特定日期后7天的日期。对于第一组,我希望我的结果是11/1/11到11/7/11。这是代码,以及它给我的结果。这非常非常奇怪。

$date = "October 31, 2011";
$nxtMon = strtotime(date("Y-m-d", strtotime($date)) . "monday"); 
$nxtTue = strtotime(date("Y-m-d", strtotime($date)) . "tuesday");
$nxtWed = strtotime(date("Y-m-d", strtotime($date)) . "wednesday"); 
$nxtThu = strtotime(date("Y-m-d", strtotime($date)) . "thursday");
$nxtFri = strtotime(date("Y-m-d", strtotime($date)) . "friday"); 
$nxtSat = strtotime(date("Y-m-d", strtotime($date)) . "saturday");  
$nxtSun = strtotime(date("Y-m-d", strtotime($date)) . "sunday");

它给了我:

2011-10-31    <---    I Want the Next Monday
2011-11-01
2011-11-02
1969-12-31    <---    ???????
2011-11-04
2011-11-05
2011-11-06

然后我将其更改为:

$date = "October 31, 2011";
$nxtMon = strtotime(date("Y-m-d", strtotime($date)) . "next monday"); 
$nxtTue = strtotime(date("Y-m-d", strtotime($date)) . "next tuesday");
$nxtWed = strtotime(date("Y-m-d", strtotime($date)) . "next wednesday"); 
$nxtThu = strtotime(date("Y-m-d", strtotime($date)) . "next thursday");
$nxtFri = strtotime(date("Y-m-d", strtotime($date)) . "next friday"); 
$nxtSat = strtotime(date("Y-m-d", strtotime($date)) . "next saturday"); 
$nxtSun = strtotime(date("Y-m-d", strtotime($date)) . "next sunday");

它给了我:

2011-11-07    <---  Wow, it works!
2011-11-01    <---  Wow, it works!
2011-11-02    <---  Wow, it works!
2011-11-03    <---  Wow, it works!
2011-11-04    <---  Wow, it works!
2011-11-05    <---  Wow, it works!
2011-11-06    <---  Wow, it works!

现在我尝试使用等于今天日期的日期:

$date = "October 22, 2011";
$nxtMon = strtotime(date("Y-m-d", strtotime($date)) . "next monday"); 
$nxtTue = strtotime(date("Y-m-d", strtotime($date)) . "next tuesday");
$nxtWed = strtotime(date("Y-m-d", strtotime($date)) . "next wednesday"); 
$nxtThu = strtotime(date("Y-m-d", strtotime($date)) . "next thursday");
$nxtFri = strtotime(date("Y-m-d", strtotime($date)) . "next friday"); 
$nxtSat = strtotime(date("Y-m-d", strtotime($date)) . "next saturday"); 
$nxtSun = strtotime(date("Y-m-d", strtotime($date)) . "next sunday");

我得到了:

2011-10-24
2011-10-25
2011-10-26
2011-10-27
2011-10-28
2011-10-29
2011-10-23   Hooray, it still works!

我似乎已经弄清楚如何得到我想要的东西,但问题的真相是,直到我输出这个问题,它似乎没有正常工作。现在突然间确实如此。它似乎有时工作,而不是其他时间没有改变任何东西。由于1969年在第一个结果中的离奇,我感觉我不知道发生了什么。

这看起来像是我想要做的事情吗?

如果有人知道更好的方式输入日期并获得接下来的7个日期,你能帮助我吗?或者告诉我一个关于1969年的内容?一切似乎工作正常,直到昨天我注意到星期四的结果没有显示在我的页面上,我追溯到这一点。谢谢你的时间。

3 个答案:

答案 0 :(得分:3)

我认为你需要一周之前的空间:

$nxtThu = strtotime(date("Y-m-d", strtotime($date)) . " thursday");

我不知道为什么你会在“星期四”与一周中的其他日子获得不同的结果,但无论如何插入空格都有意义("2011-10-31 thursday""2011-10-31thursday")。< / p>

答案 1 :(得分:2)

呃...你不想这样做吗??

$dateFrom = strtotime($date);
$nxtMon = strtotime('next monday', $dateFrom);
// ...
$nxtSun = strtotime('next sunday', $dateFrom);

从你所描述的想要最终结果的内容来看,在我看来,这应该是你需要做的全部。看起来你有点过于复杂,加上你可能没有完全阅读manual page for strtotime() - 注意第二个论点......

答案 2 :(得分:2)

您要求strtotime解释一个相当荒谬的字符串,例如2011-10-11next monday。如您所见,这在某些情况下有效,而在其他情况下则无效。我不会依赖它。这更加强大:

strtotime('next monday', strtotime($date))

这会将$date转换为时间戳,并请求相对于该时间戳的“下一个星期一”。这应该工作得更好。或者,做一些手动计算:

$date  = 'October 31, 2011';
$ts    = strtotime($date);
$day   = date('j', $ts);
$month = date('n', $ts);
$year  = date('Y', $ts);

for ($i = 0; $i < 7; $i++) {
    echo date('Y-m-d', mktime(0, 0, 0, $month, $day + $i, $year)) . PHP_EOL;
}