3

YYYY-mm-dd 形式の日付を文字列として比較する PHP コードに出くわしました。これは機能しますか?単純なケースでは機能するようですが、それらを文字列として比較する意味があるかどうかはわかりません。

<?php
$today = '2013-02-11';
$start_date = '2013-02-11';
$end_date = '2013-02-12';
$on_promo = (($start_date <= $today) && ($end_date >= $today));

if ($on_promo)
{
    echo 'ON promo';
}
else
{
    echo 'OFF promo';
}
?>
4

3 に答える 3

4

あなたはすっごく近いです。DateTimeを使用するだけです。これには最適です。

<?php
$today      = new DateTime('2013-02-11');
$start_date = new DateTime('2013-02-11');
$end_date   = new DateTime('2013-02-12');
$on_promo   = (($start_date <= $today) && ($end_date >= $today));

if ($on_promo)
{
    echo 'ON promo';
}
else
{
    echo 'OFF promo';
}
?>

実際に見てください

于 2013-02-11T22:11:08.570 に答える
2

大なりまたは小なりを使用して PHP で文字列を比較する場合、文字列はアルファベット順に比較されます。

アルファベット順2013-02-10で前に来る2013-02-13

私たちが持っている場合:

$date1 = '2013-02-10';
$date2 = '2013-02-13';
var_dump($date2 > $date1); // produces true

var_dump('apple' > 'banana'); // produces false

ただし、文字列が両方とも数値の場合、両方が整数にキャストされることに注意してください。

var_dump('11' > '101'); // produces false
var_dump('a11' > 'a101'); // produces true
var_dump('11a' > '101a'); // produces true

したがって、この形式YYYY-MM-DDを使用すると、2 つの日付を完全に比較できますが、これに依存することはお勧めしません。誰かが2013-2-11(月の先頭に がないことに注意してください0) のような日付を挿入すると、ロジックが完全に狂ってしまいます。John Conde の提案を採用して使用する方がはるかに優れています。DateTime

于 2013-02-11T22:23:54.137 に答える
1

strtotime日付を文字列として比較する代わりに使用する

<?php
$today = date('U');
$start_date = strtotime('2013-02-11');
$end_date = strtotime('2013-02-12');
$on_promo = (($start_date <= $today) && ($end_date >= $today));

if ($on_promo)
{
    echo 'ON promo';
}
else
{
    echo 'OFF promo';
}
?>
于 2013-02-11T22:10:58.960 に答える