php date()函数产生意外的输出

时间:2011-03-11 04:43:07

标签: php date timestamp

我正在尝试在PHP中执行一些基本的日期和时间戳操作,并且已经获得了意想不到的结果。我正在尝试获取现有时间戳$startDate的月份,月份和日期(即上午12点的日期时间戳)的时间戳。不过,它也在改变日期,如下面的代码所示。

$startDateString = date("Y-M-j", $startDate);
$startDateTimestamp = strtotime($startDateString);
echo "$startDate == $startDateTimestamp ?<br>";
echo date("Y-M-j", $startDate)." == ".date("Y-M-j", $startDateTimestamp)." ?<br>";

这给了我以下输出:

1299299589 == 1298952000 ?
2011-Mar-4 == 2011-Feb-28 ?

虽然我不希望时间戳相同(因为$startDate不一定是在上午12点),但我看不出日历日期是如何不同的。我做错了什么?

3 个答案:

答案 0 :(得分:2)

来自strtotime文档:

  

日期/时间字符串。有效格式在Date and Time Formats

中说明

至于您要解决的问题,您可以将其他内容传递给strtotime,例如relative formats

strtotime('midnight', $startDate);

作为一个例子,当前时间回显午夜(你今天也可以使用,如果午夜令人困惑):

echo date('Y-m-d H:i:s', strtotime('midnight'));

'今天'和'午夜'

  

时间设置为00:00:00

当然,我是DateTime对象的忠实粉丝。

$date = new DateTime($startDate);
$date->modify('midnight');
echo $date->format('Y-m-d H:i:s');

答案 1 :(得分:1)

我通常使用“Y-m-d”格式进行类似的任务,并且有效:

$startDateString = date("Y-m-d", $startDate);
$startDateTimestamp = strtotime($startDateString);
echo "$startDate == $startDateTimestamp ?<br>";
echo date("Y-m-d", $startDate)." == ".date("Y-m-d", $startDateTimestamp)." ?<br>";

答案 2 :(得分:1)

经过一些简短测试后,我发现strtotime()无法正确解析格式Y-M-j。要解决此问题,请使用标准格式,例如RFC822 date time formatISO-8601 date time format或使用j-M-Y