【问题标题】:php strtotime() function returns blank/0php strtotime() 函数返回空白/0
【发布时间】:2011-06-26 12:16:30
【问题描述】:

我有这样的字符串格式的日期时间数据:

Sat Mar 24 23:59:59 GMT 2012

我想将其转换为 UTC 时间戳,但当我尝试如下:

function texttotime($texttime)
{
    if(!$texttime || $texttime=="")
        return NULL;

    // Sat Mar 24 23:59:59 GMT 2012
    $bits = preg_split('/\s/', $texttime);

    //                  Mar     24      2012    23:59:59    GMT
    return strtotime("$bits[1] $bits[2] $bits[5] $bits[3] bits[4]");
}

它输出 0(不是 NULL)。

如果我将最后一行更改为:

    //                  Mar     24      2012    23:59:59
    return strtotime("$bits[1] $bits[2] $bits[5] $bits[3]");

它会输出一些东西(但时间戳错误,相差 -4 小时左右)。

【问题讨论】:

  • strtotime('Sat Mar 24 23:59:59 GMT 2012') 没有任何问题

标签: php datetime timezone strtotime


【解决方案1】:

您有 4 小时差异的原因是服务器时区与 GMT 相差 -4 小时。 尝试像这样定义您当前的时区:

date_default_timezone_set('Europe/London');

$result = strtotime('Sat Mar 24 23:59:59 GMT 2012');

echo date('r', $result);//Sat, 24 Mar 2012 23:59:59 +0000

【讨论】:

    【解决方案2】:

    不太清楚为什么要重新组织现有字符串,因为...

    echo $timestamp = strtotime('Sat Mar 24 23:59:59 GMT 2012'); 
    

    ...正常工作。 (它返回 1332633599,您可以通过 date('r', 1332633599); 进行检查(这将导致“Sat, 24 Mar 2012 23:59:59 +0000”,所以一切正常。)

    也就是说,如果您要提取字符串的所有组件,您不妨使用mktime。例如:

    function texttotime($texttime) {
        if(!$texttime || $texttime=="") return NULL;
    
        list($junk, $month, $day, $time, $timezone, $year) = explode(' ', $texttime);
        list($hour, $minute, $second) = explode(':', $time);
    
        return mktime($hour, $minute, $second, $month, $day, $year);
    }
    

    【讨论】:

    • 你的意思是:list($hour, $minute, $second) = explode(':', $time); ?
    • @mlaw 好点。 (适合我盲写。)感谢您的提醒。 :-)
    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多