【问题标题】:PHP strtotime giving wrong date with GMT conversion? [closed]PHP strtotime 在 GMT 转换中给出错误的日期? [关闭]
【发布时间】:2013-05-15 13:11:12
【问题描述】:

我正在阅读 Last-Modified 标题,它作为字符串是“星期一,2013 年 5 月 21 日 09:10:30 GMT”,并试图将其与我的本地时间()(新西兰)进行比较。但我刚刚注意到,当字符串中包含“Mon”时,strtotime 将日期设为“27”而不是“21”。这正常吗?难道我做错了什么?觉得我错过了什么……

$strtotime = strtotime("Mon, 21 May 2013 09:10:30 GMT");
$strtotime_date = date("Y-m-d H:i:s",$strtotime);

//[strtotime] => 1369645830
//[strtotime_date] => 2013-05-27 21:10:30

【问题讨论】:

    标签: php date strtotime gmt


    【解决方案1】:

    根据php.net,这种格式实际上可能是无效的;这里有一个可接受的格式列表:http://www.php.net/manual/en/datetime.formats.php - 未提及星期几。

    【讨论】:

    • 确认从星期一开始修剪,一开始会产生正确的结果。
    • 我看过的所有地方“Mon, ...”都是 Last-Modified 标头使用的格式,所以我猜其他人也遇到了同样的问题。你知道我是否可以在发送 Last-Modified 标头时安全地排除“Mon”而不搞砸吗?
    【解决方案2】:
    1. 错误的原因是我的日历中没有像Mon, 21 May 2013这样的东西21stMay是Tuesday

    2. From PHP DOC

    m/d/y 或 d-m-y 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 d-m-y 格式。

    为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat()。

    示例

    $strtotime = strtotime("Tue, 21 May 2013 09:10:30 GMT");
    echo date("Y-m-d H:i:s", $strtotime),PHP_EOL;
    
    $strtotime = DateTime::createFromFormat("D, d M Y g:i:s O", "Tue, 21 May 2013 09:10:30 GMT");
    echo $strtotime->format("Y-m-d H:i:s");
    

    输出

    2013-05-21 11:10:30  <- strtotime
    2013-05-21 09:10:30  <- datetime 
    

    【讨论】:

    • 啊。认为你解决了那个问题。我手动复制并更改了日期来测试它,并错过了将“星期一”更改为“星期二”。 :|
    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多