2013-10-26 に 7 日間追加しようとしましたが、2013-11-01 に戻りました。しかし、それは 2013-11-02 でなければなりません。私の古い機能は次のようなものでした:
public static function add($date, $years = 0, $months = 0, $days = 0)
{
$date = explode('-', $date);
return date(
'Y-m-d',
mktime(0, 0, 0, $date[1] + $months, $date[2] + $days, $date[0] + $years)
);
}
これは正しかったのですが、遅すぎました。より専門的な新しいものを作成しました。
public static function adddays($date, $days = 1)
{
if ($days == 0) return $date;
return date('Y-m-d', strtotime($date) + 86400 * $days);
}
それはほとんど正しく動作します。この場合ではありません。strtotime('2013-10-26') % 86400 を計算すると、午後 10 時であることがわかります。そして、何らかの理由で違いが生じます。
バージョン 5.3.2 で作業しています。
速度テスト:
3 つのバージョンで 1000 回の実行を繰り返しました
DateTime : +7 day : strtotime
26ms : 43ms : 41ms
30ms : 44ms : 42ms
25ms : 42ms : 43ms
30ms : 48ms : 49ms
したがって、より多くの行とより速い結果が得られます。Amal の DateTime を選択します。
$date = new DateTime('2013-10-26');
$days_to_add = 7;
$date->add(new DateInterval('P' . $days_to_add . 'D'));
$date->format('Y-m-d');
ありがとうございました。しかし、なぜ最初から正しく機能しなかったのかという疑問が残ります。