4

JSON Twitterフィードで指定された日付と時刻を表す文字列が、MySQLのタイムスタンプ列の範囲内にあるかどうかを判断しようとしています。

文字列の例を次に示します。

'Sat, 31 Oct 2009 23:48:37 +0000',

API( )+0000によると、それは確かにです。今、私は時間を確認するために使用しています。と:created_atUTCstrtotimedate

$t = 'Sat, 31 Oct 2009 23:48:37 +0000';
$timestamp = strtotime($t);

echo date('M d Y H:m:s', $timestamp);

取得しOct 31 2009 19:10:37ます。削除する+0000と取得しOct 31 2009 23:10:37ます。つまり、持っている場合と持っていない場合の違い+0000は4時間です。私のローカルタイムゾーン(米国メリーランド州= America/New_York)と、UTCとは明らかに異なるためだと思います。

+0000このタイムスタンプがデータベースに保存されている2つのタイムスタンプの範囲内にあるかどうかを判断しようとするときに、またはを削除する必要があるのか​​、それを使用する必要があるのか2009-10-30 23:16:38​​はよくわかりません2009-11-25 12:00:00。YYYY-MM-DD H:M:SがJavascript日時ピッカーから取得されたときに、これらのタイムスタンプを入力すると、形式の例は10/31/2009 11:40 am次のようになり、STR_TO_DATEを次のように使用します。

STR_TO_DATE("10/31/2009 11:40 am", "%m/%d/%Y %l:%i %p")'),

私はそれを残す+0000か、それを取り除くべきですか?精神的にタップアウト

4

2 に答える 2

5

もちろん、サーバーのタイムゾーンも適切に設定している場合は、タイムゾーン情報をそのままにしておく必要があります。そうしないと、すべての時間比較が 4 時間ずれてしまいます。:o)

時間を比較するには、UNIX タイムスタンプ、つまりstrtotime.

$twitterTS    = strtotime('Sat, 31 Oct 2009 23:48:37 +0000');
$localStartTS = strtotime('Sat, 31 Oct 2009 19:00:00'); // timezone is -0400 implicitly
$localEndTS   = strtotime('Sat, 31 Oct 2009 20:00:00');

if ($localStartTS <= $twitterTS && $twitterTS <= $localEndTS) {
    // twitter timestamp is within range
}

明確にするために: 異なるタイムゾーンの時刻を比較する前に、それらがすべて同じタイムゾーンに変換されていることを確認してください。タイムゾーン情報なしでロンドン時間 20:00 とニューヨーク時間 20:00 を比較すると、正しくない結果が得られます。strtotime常にローカル タイムゾーンに変換されます。入力にタイムゾーン情報が存在する場合は、それを尊重して時間を適切に変換します。それ以外の場合は、時間が既にローカライズされていると想定します。データベース内のすべての時間がローカルの場合は、比較するすべてのタイムスタンプを確実にローカライズする必要があります。
別の戦略は、保存または比較する前に常にすべての時刻を UTC に変換することです。

一貫して選択してください。

于 2009-11-01T03:18:34.423 に答える
0

PHP では、単純に部分文字列関数を使用して、json の twitter 時間をそのコンポーネントに分解できます。

//'Sat, 31 Oct 2009 23:48:37 +0000'
$hour = substring($jsontime,18,2);
$minute = substring($jsontime,22,2);
...

$phpDatetime mktime($hour,$minute,$second,$month,$day,$year);

そこから、あなたはすでにそれを持っていると思います。GMT の違いを調整することを忘れないでください。

于 2009-11-01T03:06:48.567 に答える