我查看了手册,这可能是一种转换怪异但我无法弄明白。我从用户那里得到一个日期并尝试在PHP(版本4.1)中验证它(使用strtotime并检查返回值)。用户将以欧洲格式(d-m-y)输入日期,但是当我将此格式日期提供给strtotime时,它会不一致,例如:
03-01-2011转换为2008年7月3日
我知道手册中说连字符或点分隔日期被解释为欧洲语,但它在这里不起作用。
$startDate=$_GET['start'];
echo $startDate;
$timestamp=strtotime($startDate);
echo $timestamp;
echo date("d-M-Y",$timestamp);
第一个回声的输出是03-01-2011(这是正确的 - 用户输入值),第二个回声将时间戳显示为1215039600,日期回声显示03-Jul-2008
答案 0 :(得分:3)
strtotime
是神奇的,但并非绝对可靠。如果您想保证正确的转换,您应该使用
$dt = DateTime::CreateFromFormat('d-m-Y', $startDate);
允许您为输入指定显式格式,因此没有歧义。
不幸的是,这只是PHP 5.3+,你坚持4.1。即使strfptime()
工作方式相似,也仅在5.1
我强烈建议您更新PHP版本,因为4.x已弃用且不受支持。
话虽如此,我无法看到任何一种转换歧义会如何将2011年转换为2008年。时区差异和日/月奇怪会摒弃数小时和数月,但不会改变事情3年。
答案 1 :(得分:1)
默认情况下,PHP期望和number-number-number是Y-m-d并从那里向后工作,直到日期有意义。您可能需要更改区域设置:http://ca.php.net/manual/en/class.locale.php。这应该可以解决欧洲日期格式错误,但请记住,现在反过来会出现问题。