0

レポートからSQLへの合計値を取得しようとしています。行がSQLに入る最後の行よりも新しい場合にのみこれを発生させたいので、レポートにタグ付けされた日付と時刻を追加します。

例えば

141480128217,WRONG_PERFORMANCE,g3t3,19/01/2013 02:58pm
182483629803,WRONG_PERFORMANCE,g3t3,19/01/2013 03:01pm
108484044725,WRONG_PERFORMANCE,g3t1,19/01/2013 03:10pm

したがって、これをすでに実行していて、前に追加した最後の行が午後3時1分であった場合、「WRONG_PERFORMANCE」の合計は2でしたが、もう一度実行すると3にしますが、更新ごとに2倍にするので、最初の行は2になり、2番目は5になり、新しい行がない場合でも、次の更新は8(5 + 3)になります。これを回避するために、レポートの日付がSQLからの最後の更新よりも新しいことを確認したいと思います(各行の日付を追加し、前の日付を置き換えて、最後に追加される日付がSQLの日付)が、文字列であるため、正しく比較されません。どうすればこれを行うことができますか?私はいくつかの異なる方法を試しましたが、どこにも行きませんでした。

編集 私は以下を試しました:

$newDate = date("d/m/y/ h:i:s", strtotime("19/01/2013 01:42pm"));

そして結果を得ました:

01/01/70/ 12:00:00

私は次のように日と月を切り替えてみました:

$newDate = date("d/m/y h:i:s", strtotime("01/19/2013 01:42pm"));

そして、次のようになりました。

19/01/13 01:42:00

では、これをレポートでそのまま機能させるにはどうすればよいですか?!?

結果

$date = str_replace("/", "-", "19/01/2013 01:42pm");
$newDate = date("d/m/y h:i:s", strtotime("$date"));
echo $newDate;

正しい日付形式を返しました!

4

2 に答える 2

0

日付を YYYY-MM-DD 形式 (必要に応じて時刻を含める) に変換すると、日付を数値で並べ替えることができます。次に、最初の (並べ替え方法によっては最後の) レコードが最新になります。

編集:

php.netを引用するため、str_replaceはあなたの問題を修正しました:

「m/d/y または dmy 形式の日付は、さまざまな構成要素間のセパレーターを調べることで明確になります。セパレーターがスラッシュ (/) の場合、アメリカの m/d/y が想定されます。一方、セパレーターがダッシュ (-) またはドット (.) の場合、ヨーロッパの dmy 形式が想定されます。"

したがって、セパレーターを - にすることで、php は am/d/y 日付ではなく dmy 日付を検索するようになりました。

于 2013-02-21T14:20:49.967 に答える
0

文字列をそのまま日時に変換し、それを使用して日付を比較できます。 ただし、日付は D/M/Y 形式であり、サーバーは日付を M/D/Y として解釈するように設定されている可能性が高く、19 番目の月はありません。:)

その場合は、 SET DATEFORMAT DMYを試してください。

于 2013-02-21T14:41:45.673 に答える