DATETIME形式の値に1日を追加する


87

特定の状況では、DATETIME形式の変数の値に1日を追加したいと思います。

$start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"));

これを行うための最良の方法は何ですか?

回答:


63

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);

これで現在の時刻がわかりませんか?ユーザーが入力した時間を保持する必要があります。
ian

はい、そうなりますが、カスタム時間に変更する必要がある値をマークしました。あなたは置き換えることができtime()strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")
RaYell 2009

これは夏/冬の節約ではありません!DST保存日時操作を使用してください
2017

208

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');

ああ、ループダループ
ファンクフォーティナイナー2015年

9
複数日を追加する場合は、複数形または単数形を使用して同じ結果を得ることができます。例:+2 dayまたは+2 days(明らかに+2 days意味的に正しい)
timhc22 2015年

これらの方法の実際的な違いは何ですか?最初の例は、私には最も単純で最も意味的なようです。
BadHorsie 2017

24

日付と時刻のコンストラクタは、パラメータを取りますstring time$time異なるものにすることができます、それは日時形式を尊重する必要があります

例としていくつかの有効な値があります:

  • 'now' (デフォルト値)
  • 2017-10-19
  • 2017-10-19 11:59:59
  • 2017-10-19 +1day

したがって、あなたの場合、あなたは以下を使うことができます。

$dt = new \DateTime('now +1 day'); //Tomorrow
$dt = new \DateTime('2016-01-01 +1 day'); //2016-01-02

3
説明なしで答えますか?読むにはどうすれば良い答えを書くのですか?
Shashanth 2016

10
  1. strtotime文字列をタイムスタンプに変換するために使用します
  2. それに1日を追加します(例:86400秒(24 * 60 * 60)を追加することにより)

例えば:

$time = strtotime($myInput);
$newTime = $time + 86400;

1日しか追加されていない場合は、strtotimeを再度使用するのはおそらくやり過ぎです。


それで、それをTIMESTAMPに変換してから、DATETIME形式に戻す必要がありますか?
ian

4
毎日が24時間というわけではないことにも注意する必要があると思います。世界のほとんどの場所で、夏時間(夏時間)とは、1年に1日が23時間、もう1日が25時間であることを意味します。
nickf 2012年

UPS。日時をタイムスタンプに変換するため、UTCベースになります。また、UTC日は常に24時間です。date()ローカルタイムゾーンで変換し直す場合は、夏時間が考慮されます。
rabudde 2018年

5

使用できます

$now = new DateTime();
$date = $now->modify('+1 day')->format('Y-m-d H:i:s');


1

以下のように使用できます。

$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)));

0

サーバー要求時間を使用して日を追加します。期待どおりに機能しています。

25/08/19 => 27/09/19

$timestamp = $_SERVER['REQUEST_TIME'];
$dateNow = date('d/m/y', $timestamp);
$newDate = date('d/m/y', strtotime('+2 day', $timestamp));

ここで「+ 2日」は任意の日数を追加します。


0

phpの日付に日を追加するためのより簡潔で直感的な方法があります。誤解しないでください、それらのphp式は素晴らしいですが、あなたは常にそれらをどのように扱うかをグーグルで検索する必要があります。そのためのオートコンプリート機能がありません。

これらのケースを処理する方法は次のとおりです。

(new Future(
    new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
    new OneDay()
))
    ->value();

私にとっては、はるかに直感的で、オートコンプリートは箱から出してすぐに機能します。毎回解決策をグーグルで検索する必要はありません。

素晴らしいボーナスとして、結果の値のフォーマットについて心配する必要はありません。すでにISO8601フォーマットになっています。

これはメレンゲライブラリです。他にも例があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.