我正在使用日期函数和strtotime函数来格式化日期。
前:
<?php
$input_date = '03-JUL-09 14:53';
$formatted_date = date("Y-m-d H:i:s", strtotime($input_date));
echo $formatted_date;
?>
给我一个预期的输出: 2009-07-03 14:53:00
如果输入更改为(我正在删除分钟部分) -
<?php
$input_date = '03-JUL-09 14';
$formatted_date = date("Y-m-d H:i:s", strtotime($input_date));
echo $formatted_date;
?>
这里的输出是 1970-01-01 05:30:00 ,这完全没有预期。
我正在做的错误以及如何修复它。
由于
阿米特
答案 0 :(得分:2)
1970-01-01 05:30:00 是印度在Unix时代的时间( 1970-01-01 00:00:00 GMT / UTC )。这意味着strtotime
返回了0
或false
,0
已被date
转换为{{1}}。这是因为它无法处理其输入,正如其他人所解释的那样。
答案 1 :(得分:2)
函数strtotime希望给出一个包含美国英语日期格式的字符串,并尝试将该格式解析为Unix时间戳。 您可以使用
之类的字符串但不完整的日期格式如“09-07-03 14”。解析器不理解它并且不返回任何内容,因此当您调用date("Y-m-d H:i:s", strtotime($input_date));
时它返回0时间戳(1970年1月1日00:00:00 UTC),因为它是默认值。
你必须提供一个可以解析的正确字符串。
答案 2 :(得分:1)
这看起来归结为strtotime()无法确定哪个数字是第二个日期字符串中的数字。
我最好的建议是在将日期时间值传递给strtotime()之前将其标准化。像这样简单的东西就足够了
if ( false === strpos( $input_date, ':' ) )
{
$input_date .= ':00';
}
答案 3 :(得分:1)
03-JUL-09 14似乎不是有效的日期字符串,03-JUL-09 14:00工作正常
来自php手册:strtotime - 将关于任何英文文本日期时间描述解析为Unix时间戳
答案 4 :(得分:0)
1970-01-01
是典型的基准日期(例如ctime
)。我相信输出会将0
的值格式化为日期,即1970
,以及一天中无关的05:30:00
时间。
我认为在尝试格式化不包含所有请求的时间元素的日期时,这是一个侥幸。您可以填充日期数据以生成完整的输入日期吗?
答案 5 :(得分:0)
strtotime()
无法解析第二个字符串。它不知道额外的“14”意味着什么,所以它返回bool(false)
。调用date(false)
返回与date(0)
相同的内容,即它为您提供UNIX纪元的日期:1970年1月1日00:00:00 GMT根据您当地时区调整。