PHP strtotime()看起来好像是期待欧元格式

rho*_*son 7 php datetime strtotime

我一直在使用PHP的strtotime()方法接受表单上的日期字段.我喜欢它多么强大,它会如何接受"明天","下周四",或(据说)的任何日期表示,并将其转换为Unix时间戳.

它一直很好 - 直到昨天.有人进入"2-4-10"而不是记录2010年2月4日,它记录在2002年4月10日!所以它期望YMD而不是MDY.

我想也许问题只是使用了两位数的年份,所以我们再次尝试使用"2-4-2010".记录在2010年4月2日!那时我只是不明白strtotime()正在做什么.PHP.net表示它希望采用美国英语日期格式.为什么它会假设DMY?

有没有解决的办法?或者我是否必须停止使用strtotime()?

注意:我刚才做了一个测试.当你使用斜杠而不是连字符/短划线时,它工作正常,即使是2/4/10.为什么这个重要?如果这一切是这样,我应该只是运行str_replace函数-把它传递给之前的strtotime对表单输入("/",$输入"")()?

Mor*_*dur 7

- 表示ISO日期:

03-02-01  => 1. february 2003 (ISO)
01.02.03  => 1. february 2003 (European)
02/01/03  => 1. february 2003 (US)
Run Code Online (Sandbox Code Playgroud)


GZi*_*ipp 6

其行为strtotime()主要基于GNU日期输入格式规范.但是,尽管它本身是强大的,但不应该期望它能够读懂思想.允许自由格式的用户日期输入要求永久性的麻烦.