3

我正在构建一个具有每周视图的日记,我认为我已经破解了这些视图,因为日期似乎看起来是正确的。直到我的 MySQL 查询不断返回看似随机的结果,我才意识到月份实际上被视为一天。

$week_number = date("W");
$year = date("Y");

for ($day=0; $day<=6; $day++) {
    $daily_date = date('d/m/Y', strtotime($year."W".$week_number.$day))."\n";
    $StartDate = date('d', strtotime($daily_date));
}

echo $starteDate;

$startDate返回月份的数字而不是日期,并且确实date('m', strtotime($daily_date))返回日期而不是月份。

我不明白我在哪里犯了这个愚蠢的错误,所以任何帮助都将不胜感激。

4

2 回答 2

4

这是因为日期的美国化 - strtotime 会将日期读取为 m/d/Y 而不是 d/m/Y。

日期的ISO是 Ymd,为方便起见,我在进行任何类型的日期操作时都会使用这种格式。

于 2012-09-03T16:56:48.573 回答
1

那个代码太可怕了。您正在多次将日期转换为字符串。绝对没有理由获取您的$year . w. $week_number.etc...值,将其转换为字符串,然后将该字符串转换回日期以提取日期值。

同样,d/m/Y 是一种用于日期传输的可怕格式,因为... 让我感到困惑,什么是 01/02/03。是 2001 年 2 月 3 日吗?2002 年 3 月 1 日?想不通,怎么能指望strtotime做的更好呢?它相当聪明,但它不是无所不知的,而且它绝对不是万无一失的。4 位数的年份确实让它更容易一些,但你仍然可能会遇到d/m混乱m/d

为什么不简单

$StartDate = date('d', strtotime($year."W".$week_number.$day));

或者更好的是,使用DateTime类并选择适当的DateInterval

于 2012-09-03T16:56:37.840 回答