好的回忆!
echo date('r', strtotime('10.01.11'));
版画: Sun,2012年2月5日 10:01:11
预计:星期一,2011年1月10日00:00:00
如何强制strtotime()
仅将输入字符串解析为日期?我必须以不同的格式转换一堆日期。 DateTime::format
不是一个选项,因为我不知道脚本会遇到的所有格式,甚至没有安装在服务器上(我没有权限这样做)。
试过
strtotime('day 10.01.11')
,
strtotime('10.01.11 00:00:00')
,
strtotime('10.01.11 midnight')
- 没什么用。
非常感谢任何帮助
答案 0 :(得分:2)
如何强制strtotime()将输入字符串解析为仅日期?
你没有。 strtotime
使用very well-defined parsing formats。它产生的东西将完全取决于你给它的东西。
'10.01.11'
被解析为a time format,因为总是解释由句点分隔的三对数字作为时间。它将识别日期when separated by dashes, slashes or spaces。令人讨厌的是,在日期格式页面上有一个使用点的示例,但似乎没有一种确定的方法来强制日期解析而不是时间解析。叹了口气,PHP。
如果您需要将特定格式解释为日期而不是时间,则有两种选择。
首先,您可以使用不同的日期解析方法。如果预期的格式永远不会改变,您可以使用DateTime::createFromFormat()
或可怕的strptime
。您已经在评论中指出格式会有所不同,并且您的PHP版本已经足够大,不会有DateTime,所以这可能不适合您。
其次,您可以预处理数据。至少在此示例中,.
到/
的转换可能会有所帮助,但10/01/11
可能会模糊不清地作为人类的约会。一个小的正则表达式嗅探确定如何最好地处理数据没有错。
还有第三种选择:如果您从用户那里获得此信息,请让您的应用程序开始强制用户以正常,一致,可解析的格式输入日期。训练您的用户使用YYYY-MM-DD可能需要一些时间,但这可能是最合理的长期赌注。
答案 1 :(得分:1)
为什么不默认将时间设置为00:00:00? e.g。
echo date('D, d M Y H:i:s', strtotime('10.01.11'));
strtotime也使用美国日期格式,所以这将被翻译成2011年10月1日。使用iso日期格式更容易
答案 2 :(得分:1)
经测试,这可行:
$date = DateTime::createFromFormat('d.m.y', '10.01.11');
echo $date->format('r');
答案 3 :(得分:1)
为您修改输入选项吗?
$str = '10.01.11';
$str = str_replace('.', '/', $str);
echo date('r', strtotime($str));
但是,根据MM.DD.YY模式(美国标准),这仍然会输出Sat, 01 Oct 2011 00:00:00
。
编辑:根据您的使用情况,您可以考虑创建一个正则表达式模式列表并相应地解析日期。很难让这样的代码对所有的可能性开放。
答案 4 :(得分:0)
我不认为strtotime知道如何解析这些日期。为避免潜在的歧义,最好使用ISO 8601(YYYY-MM-DD)日期。