我一直在使用PHP的strtotime()方法来接受表单上的日期字段。我喜欢它是多么强大,它将如何接受“明天”,“下星期四”,或(据说)任何日期表示,并将它转换为Unix时间戳。
一直运作得很好直到昨天。有人输入了"2-4-10“,而不是2010年2月4日,它记录了2002年4月10日!所以它期望的是Y-M-D而不是M Y。
我想问题可能只是使用了2位数的年份,所以我们再次尝试了"2-4-2010“。记录在2010年4月2日!在这一点上,我只是不明白strtotime()在做什么。PHP.net表示,它预计将采用美国英语日期格式。那它为什么要假设D?
有办法绕道吗?还是我必须停止使用strtotime()?
注:,我刚才做了一个测试。当你用斜线代替连字符/破折号时,即使用2/4/10,它也很好。这到底有什么关系?如果仅此而已,我是否应该在表单输入上运行str_replace("-“、"/”、$input),然后将其传递给strtotime()?
发布于 2010-02-05 13:43:11
-指示ISO日期:
03-02-01 => 1. february 2003 (ISO)
01.02.03 => 1. february 2003 (European)
02/01/03 => 1. february 2003 (US)发布于 2010-02-05 13:56:30
strtotime()的行为主要基于GNU日期输入格式规范。但是,尽管它很强大,但不应该指望它能读懂人们的思想。允许自由形式的用户日期输入是在要求永久的麻烦。
发布于 2010-04-14 01:37:09
我有这个问题,并解决了它完全按照您的建议-在用户输入的日期做一个str_replace -用斜杠代替破折号。这防止了strtotime使用ISO并解决了这个问题。
https://stackoverflow.com/questions/2207495
复制相似问题