特定の状況では、DATETIME形式の変数の値に1日を追加したいと思います。
$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));
これを行うための最良の方法は何ですか?
回答:
PHPでこれを実行したい場合:
// replace time() with the time stamp you want to add one day to
$startDate = time();
date('Y-m-d H:i:s', strtotime('+1 day', $startDate));
MySQLで日付を追加する場合:
-- replace CURRENT_DATE with the date you want to add one day to
SELECT DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY);
time()
てstrtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
。
PHP5.2で導入されたDateTimeでこれを行う方法は複数あります。これを使用strtotime()
するのとは異なり、夏時間とうるう年が考慮されます。
$datetime = new DateTime('2013-01-29');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');
// Available in PHP 5.3
$datetime = new DateTime('2013-01-29');
$datetime->add(new DateInterval('P1D'));
echo $datetime->format('Y-m-d H:i:s');
// Available in PHP 5.4
echo (new DateTime('2013-01-29'))->add(new DateInterval('P1D'))->format('Y-m-d H:i:s');
// Available in PHP 5.5
$start = new DateTimeImmutable('2013-01-29');
$datetime = $start->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');
+2 day
または+2 days
(明らかに+2 days
意味的に正しい)
strtotime
文字列をタイムスタンプに変換するために使用します例えば:
$time = strtotime($myInput);
$newTime = $time + 86400;
1日しか追加されていない場合は、strtotimeを再度使用するのはおそらくやり過ぎです。
date()
ローカルタイムゾーンで変換し直す場合は、夏時間が考慮されます。
私が使用して起動する提案はZend_DateからクラスZend Frameworkのを。私は知っています、それは少しオフトピックですが、私はこの方法が好きです:-)
$date = new Zend_Date();
$date->add('24:00:00', Zend_Date::TIMES);
print $date->get();
以下のように使用できます。
$start_date = date('Y-m-d H:i:s');
$end_date = date("Y-m-d 23:59:59", strtotime('+3 days', strtotime($start_date)));
日を一定に設定して、以下のように使用することもできます。
if (!defined('ADD_DAYS')) define('ADD_DAYS','+3 days');
$end_date = date("Y-m-d 23:59:59", strtotime(ADD_DAYS, strtotime($start_date)));
phpの日付に日を追加するためのより簡潔で直感的な方法があります。誤解しないでください、それらのphp式は素晴らしいですが、あなたは常にそれらをどのように扱うかをグーグルで検索する必要があります。そのためのオートコンプリート機能がありません。
これらのケースを処理する方法は次のとおりです。
(new Future(
new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
new OneDay()
))
->value();
私にとっては、はるかに直感的で、オートコンプリートは箱から出してすぐに機能します。毎回解決策をグーグルで検索する必要はありません。
素晴らしいボーナスとして、結果の値のフォーマットについて心配する必要はありません。すでにISO8601フォーマットになっています。