Iai*_*ser 11 php datetime locale date strtotime
我无法相信我以前从未遇到过这个.
基本上,我正在解析人工创建的文本文档中的文本,我需要解析的一个字段是日期和时间.因为我在澳大利亚,日期格式化,dd/mm/yyyy但strtotime只想将其解析为美国格式的日期.此外,爆炸式的/方法并不奏效,因为正如我所提到的,这些文件是手工打印的,其中一些是采用的形式d M yy.
我尝试了多种组合,setlocale但无论我尝试什么,语言总是设置为美国英语.
我相当确定setlocale是关键,但我似乎无法找到正确的代码.试过这些:
还有什么我可以尝试的吗?
为清楚起见:我在带有Windows框的IIS上运行.
非常感谢 :)
伊恩
例:
$mydatetime = strtotime("9/02/10 2.00PM");
echo date('j F Y H:i', $mydatetime);
Run Code Online (Sandbox Code Playgroud)
产生
2 September 2010 14:00
Run Code Online (Sandbox Code Playgroud)
我想要它产生:
9 February 2010 14:00
Run Code Online (Sandbox Code Playgroud)
我的解决方案
我在这里给出了一个答案,因为它是一个比我更容易理解的解决方案,但这就是我想出来的:
$DateTime = "9/02/10 2.00PM";
$USDateTime = preg_replace('%([0-3]?[0-9]{1})\s*?[\./ ]\s*?((?:1[0-2])|0?[0-9])\s*?[./ ]\s*?(\d{4}|\d{2})%', '${2}/${1}/${3}', $DateTime);
echo date('j F Y H:i',strtotime($USDateTime));
Run Code Online (Sandbox Code Playgroud)
因为我不能依赖用户与他们的日期条目保持一致,所以我的正则表达式更加复杂:
希望这将符合大多数日期写作风格......
Chr*_*son 19
有一个快速修复,似乎迫使PHP strtotime使用英国日期格式.即:用' - '替换传入字符串中的所有'/'.
例:
date('Y-m-d', strtotime('01/04/2011'));
Run Code Online (Sandbox Code Playgroud)
会产生:2011-01-04
date('Y-m-d', strtotime('01-04-2011'));
Run Code Online (Sandbox Code Playgroud)
会产生:2011-04-01
你可以用它str_replace来实现这一目标.
例:
str_replace('/', '-', '01/04/2011');
Run Code Online (Sandbox Code Playgroud)
编辑:
正如评论中所述,这是有效的,因为PHP将斜杠解释为美式,将点/短划线解释为欧式.
到目前为止,我已经广泛使用了这个技巧并且没有任何问题.
如果有人有任何理由不使用此,请发表评论.