php strtotime显示月份为天

时间:2012-09-03 16:50:35

标签: php

我正在构建一个每周观看次数的日记,我以为我已经破解了,因为日期似乎是正确的。直到我的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))会返回当天而不是月份。

我无法理解我犯了这个愚蠢的错误,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:3)

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

ISO for dates是Y-m-d,为了方便起见,我会在进行任何日期操作时使用这种格式。

答案 1 :(得分:0)

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

同样,d / m / Y是一种用于日期传输的可怕格式,因为......谜我这个,什么是01/02/03。那是2001年2月3日吗? 2002年3月1日?如果你无法弄清楚,你怎么能期望strtotime更好?它相当聪明,但它并不是无足轻重的,而且它绝对不是万无一失的。 4digit确实让它更容易一些,但你仍然可以使用d/m v.s. m/d混乱。

为什么不简单

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

或者更好的是,使用DateTime课程并选择合适的DateInterval