来自php日期(格式化)功能的奇怪/错误输出

时间:2013-03-07 10:07:36

标签: php datetime

我在尝试将Unix时间(取自SVN Info命令生成的XML文件)转换为格式化日期/时间时遇到问题。

$svnInfoTime是正确的,生成的$unixTime反映了这一点,尽管$formattedDate似乎略有偏差。

我见过这种情况发生在许多(但不是全部)情况中。一个例子:

<?php 
    $svnInfoTime = "2013-03-06T15:42:00.894378Z";
    $unixTime = strtotime($svnInfoTime);
    $formattedDate = date('d F, Y, h:i A', $unixTime);

    echo "SVN info time : " . $svnInfoTime . "<br>";
    echo "unix time     : " . $unixTime . "<br>";
    echo "formatted date: " . $formattedDate . "<br>";
>

输出:

SVN info time : 2013-03-06T15:42:00.894378Z
unix time : 1362584520
formatted date: 06 March, 2013, 04:42 PM

为什么格式化日期显示在下午4:42,当Unix时间是3:42 pm?

谁能告诉我哪里出错?

1 个答案:

答案 0 :(得分:2)

PHP的date()功能在输出/格式化日期时会考虑您的时区设置。

检查您所在的时区,或将自定义时区设置传递给date功能,以便 3:42 PM 输出。

P.S。它在codepad.viper-7.com

上工作正常

修改

date()来电之前传递不同的timezone(Asia/Kolkata)时,会产生输出 9:12 PM

$svnInfoTime = "2013-03-06T15:42:00.894378Z";
$unixTime = strtotime($svnInfoTime);
date_default_timezone_set('Asia/Kolkata');
$formattedDate = date('d F, Y, h:i A', $unixTime);
echo "SVN info time : " . $svnInfoTime . "<br>";
echo "unix time     : " . $unixTime . "<br>";
echo "formatted date: " . $formattedDate . "<br>";

给出:

  

SVN信息时间:2013-03-06T15:42:00.894378Z
  unix时间:1362584520
  格式化日期:2013年3月6日,下午09:12