php strtotime将月份显示为天


php strtotime displaying month as day

我正在构建一个具有周视图的日记,我认为我已经破解了它,因为日期似乎是正确的。直到我的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))返回的是日期而不是月份。

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

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

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

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

同样,d/m/Y对于日期传输来说是一种可怕的格式,因为。。。问我这个问题,03年2月1日是什么。是2001年2月3日吗?2002年3月1日?如果你不能弄清楚,你怎么能指望strtotime在这方面做得更好呢?它相当聪明,但不是无所不知,而且绝对不是绝对正确的。一个4位数的年份确实会让它变得容易一些,但你仍然可能会出现d/mm/d的混淆。

为什么不简单的

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

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