$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
上記を変換するにはどうすればよいですか$interval
phpで数秒
このための関数format
があります。ただし、秒数は返されません。秒数を取得するには、この手法を使用します
$seconds = abs($datetime1->getTimestamp()-$datetime2->getTimestamp());
本当に使用したい場合は$interval
あなたはそれを計算する必要があります。
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
ここに
86400
は1日の秒数です3600
は1時間の秒数です60
は1分間の秒数です間隔の秒数を取得する別の方法は、それをゼロの日付に追加し、その日付のタイムスタンプを取得することです。
$seconds = date_create('@0')->add($interval)->getTimestamp();
このメソッドは、DateIntervalコンストラクターを介して作成された間隔をほぼ正しく処理しますが、 shipluの回答 は、そのような間隔の年、月、日を無視します。ただし、shipluの答えは、2つの日付を引くことによって作成された間隔の方が正確です。時間、分、秒のみで構成される間隔の場合、どちらの方法でも正しい答えが得られます。
私は shipluの答え: に追加するだけです
function dateIntervalToSeconds($interval)
{
$seconds = $interval->days*86400 + $interval->h*3600
+ $interval->i*60 + $interval->s;
return $interval->invert == 1 ? $seconds*(-1) : $seconds;
}
負の間隔を処理します。
ブリリアンの答え -とは反対に、上記のコードは年、月、日付を正しく考慮していることに注意してください。 $ interval-> daysは絶対値であるため($ interval-> dは月を基準にしています)。
EDIT:@で指摘されているように、この関数はまだ正しくありませんブリリアン。反例は
new DateInterval('P4M3DT2H');
それは月をうまく処理しません。