日付は常にMySQLの日時形式(YYYY-MM-DD)で保存する必要があります。これにより、MySQLの組み込みの日付機能を簡単に利用できます。他の形式で保存すると、それらの値を表示するだけでなく、より多くのことを実行したい場合に、(場合によっては多くの)より多くの作業が必要になります。
PHPでやりたいことを達成するには、 DateTime()
(この回答
に基づく ):
$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
$interval = $datetime1->diff($datetime2);
if ($interval->days <= 7)
{
$elapsed = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed = str_replace(array('0 years,', ' 0 months,', ' 0 days,', ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ', ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;
}
else
{
echo $firstDate;
}
$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
これらの行はDateTime()
を作成します それぞれの日付を持つオブジェクト。
$interval = $datetime1->diff($datetime2);
この行は、最初の日付から2番目の日付を減算し、その差をDateInterval()
として返します。 オブジェクト。
if ($interval->days > 7)
この行は、2つの日付の間に7日以上が経過したことを確認します。その場合、最初のコードブロックが実行されます。そうでない場合は、最初の日付が印刷されます。
$elapsed = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed = str_replace(array('0 years,', ' 0 months,', ' 0 days,', ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ', ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;
このコードブロックは、2つの日付の日付の差を取得します( DateInterval()
オブジェクト)そしてあなたが要求したフォーマットでそれをフォーマットします。 2行目は、値がない期間(つまり、0か月)を削除し、それらを文字列から削除します。 3行目は、1つの値(つまり1か月)の期間を取り、最後に不要な「s」を削除します(つまり、1か月は1か月になります)。