2012-09-03 99 views
2

我正在构建一个日记,每周查看我认为我已经破解,因为日期似乎是正确的。直到我的MySQL查询继续返回,看起来像随机结果,我才意识到这个月实际上被看作是一天。php strtotime显示月份为天

$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))回报。

我不明白,我已经做这个愚蠢的错误,因此任何帮助,将不胜感激。

回答

3

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

ISO for dates是Y-M-d和便于做任何一种方式操控的时候我会使用这种格式。

+0

感谢您的帮助。我承认,我花了一段时间才意识到,我需要使用连字符而不是正斜杠,但是当我做到了这一点时就工作了。再次感谢 – tatty27

+1

这个废话的错误带走了我珍贵的一个小时....感谢您节省了我的时间...... – chhameed

0

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

同时,d/M/Y是使用日期运输可怕的格式,因为......谜语我这个,什么是01/02/03。那是2001年2月3日? 2002年3月1日?如果你无法弄清楚,你怎么能期望strtotime更好呢?它非常聪明,但它并不是全部,它肯定是不可靠的。 4digit年确实让它更容易一些,但你仍然可以用d/mv.s. m/d混乱。

为什么不干脆

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

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

+0

谢谢您的回复。我最初尝试了你的建议,但它不起作用,所以我只是尝试传递一个完整的变量,因为这个变量似乎显示正确。看来问题是我用d/m/y代替d-m-y。我不知道一个是美国时间格式,另一个是欧洲 – tatty27