首先,我要做的是获取特定日期后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年的内容?一切似乎工作正常,直到昨天我注意到星期四的结果没有显示在我的页面上,我追溯到这一点。谢谢你的时间。
答案 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;
}