私はグーグルで日付を比較するいくつかの方法を試しましたが、残念ながら期待どおりの結果が得られませんでした。私は次のような記録の現在の状態を持っています:
mysql> select date_format(date(starttime),'%d-%m-%Y') from data;
+-----------------------------------------+
| date_format(date(starttime),'%d-%m-%Y') |
+-----------------------------------------+
| 28-10-2012 |
| 02-11-2012 |
| 02-11-2012 |
| 02-11-2012 |
| 03-11-2012 |
| 03-11-2012 |
| 07-11-2012 |
| 07-11-2012 |
日付を比較したいので、次のようにします:
mysql> select date_format(date(starttime),'%d-%m-%Y') from data where date_format(date(starttime),'%d-%m-%y') >= '02-11-2012';
+-----------------------------------------+
| date_format(date(starttime),'%d-%m-%Y') |
+-----------------------------------------+
| 28-10-2012 |
| 02-11-2012 |
| 02-11-2012 |
| 02-11-2012 |
| 03-11-2012 |
| 03-11-2012 |
| 07-11-2012 |
| 07-11-2012 |
結果には「28-10-2012」を含めるべきではないと考えています。なにか提案を?前もって感謝します。
あなたのフォーマットは根本的にソート可能なものではありません-あなたはstringsと文字列「28-10-2012」is「02-11-2012」より大きい。
代わりに、日付を日付として比較し、出力用のターゲット形式にのみ変換する必要があります。
これを試して:
select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';
(入力は、 ドキュメント のように、年月値形式である必要があります。)
starttime
がDATETIME
フィールドである場合、クエリの変更を検討して、変換が繰り返されないようにすることができます。 (オプティマイザーはそれを避けるのに十分賢いかもしれませんが、チェックする価値があります。)
select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';
(日付をd-m-Y
としてフォーマットすることは珍しいことに注意してください-ISO-8601標準などであるy-M-d
を一般的に使用することをお勧めします。しかし、上記のコードはあなたが尋ねたことを行います質問で。)
02-11-2012の代わりに2012-11-02を使用すると、date_format()はもう必要ありません
次の方法を使用します。
public function dateDiff ($date1, $date2) {
/* Return the number of days between the two dates: */
return round(abs(strtotime($date1)-strtotime($date2))/86400);
}
/* end function dateDiff */
それが役立ちます!