1

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

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 小时左右)。

4

2 回答 2

1

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

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

...正常工作。(它返回 1332633599,您可以通过它检查date('r', 1332633599);(这将导致“星期六,2012 年 3 月 24 日 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);
}
于 2011-02-13T17:10:42.197 回答
1

您有 4 小时差异的原因是服务器时区是从格林威治标准时间 -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
于 2011-02-13T17:12:59.810 回答