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);(これにより、"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);
}
于 2011-02-13T17:10:42.197 に答える
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
于 2011-02-13T17:12:59.810 に答える