PHP、明日を日付から取得


88

の形式のPHP日付があり、2013-01-22明日の日付を同じ形式で取得したいので、たとえば2013-01-23

PHPでこれはどのように可能ですか?

回答:


201

日時を使用

$datetime = new DateTime('tomorrow');
echo $datetime->format('Y-m-d H:i:s');

または:

$datetime = new DateTime('2013-01-22');
$datetime->modify('+1 day');
echo $datetime->format('Y-m-d H:i:s');

または:

$datetime = new DateTime('2013-01-22');
$datetime->add(new DateInterval("P1D"));
echo $datetime->format('Y-m-d H:i:s');

またはPHP 5.4以降:

echo (new DateTime('2013-01-22'))->add(new DateInterval("P1D"))
                                 ->format('Y-m-d H:i:s');

1
これは現在を使用しており、指定された日付を渡す必要があります。
ジャスティン

2番目の方法がおそらく最良です。
nickb

72
 $tomorrow = date("Y-m-d", strtotime('tomorrow'));

または

  $tomorrow = date("Y-m-d", strtotime("+1 day"));

ヘルプリンク:STRTOTIME()


1
私はこれを使用しました、そしてすべての答えの中で、最も短くて最も単純なバージョンです、ありがとう!
ボンベルマン

17

これにタグを付けたので 、次の+1 dayように修飾子とともに使用できます。

$tomorrow_timestamp = strtotime('+1 day', strtotime('2013-01-22'));

つまり、DateTime使用する方がはるかに優れたソリューションです。


14
<? php 

//1 Day = 24*60*60 = 86400

echo date("d-m-Y", time()+86400); 

?>

17
これは、エッジケース(夏時間)では失敗することに注意してください。
JJJ 2014

この答えは間違っています。私はcronjobでこれをループで使用していて、システムが停止しました。
jewelnguyen8


3

使用DateTime

今から明日を迎えるには:

$d = new DateTime('+1day');
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

結果:2017年6月28日08.13.20

日付から明日を取得するには:

$d = new DateTime('2017/06/10 08.16.35 +1day')
$tomorrow = $d->format('d/m/Y h.i.s');
echo $tomorrow;

結果:2017年6月11日08.16.35

それが役に立てば幸い!


1
/**
 * get tomorrow's date in the format requested, default to Y-m-d for MySQL (e.g. 2013-01-04)
 *
 * @param string
 *
 * @return string
 */
public static function getTomorrowsDate($format = 'Y-m-d')
{
    $date = new DateTime();
    $date->add(DateInterval::createFromDateString('tomorrow'));

    return $date->format($format);
}

1

奇妙なことに、それは完全にうまく機能しているように見えます: date_create( '2016-02-01 + 1 day' );

echo date_create( $your_date . ' + 1 day' )->format( 'Y-m-d' );

それをすべき


0

まず、正しい抽象化を思いつくことが常に鍵となります。可読性、保守性、拡張性の鍵。

ここで、非常に明白な候補はISO8601DateTimeです。少なくとも2つの実装があります。1つ目は文字列から解析された日時、2つ目は明日です。したがって、使用できる2つのクラスがあり、それらの組み合わせにより(ほぼ)望ましい結果が得られます。

new Tomorrow(new FromISO8601('2013-01-22'));

どちらのオブジェクト ISO8601日時であるため、そのテキスト表現は必ずしも必要なものではありません。したがって、最後のストロークは日付形式を取ることです:

new Date(
    new Tomorrow(
        new FromISO8601('2013-01-22')
    )
);

オブジェクトだけでなくテキスト表現も必要なので、value()メソッドを呼び出します。

このアプローチの詳細については、この投稿をご覧ください。


-1

ここで機能しています

function plus_one_day($date){
 $date2 = formatDate4db($date);
 $date1 = str_replace('-', '/', $date2);
 $tomorrow = date('Y-m-d',strtotime($date1 . "+1 days"));
 return $tomorrow; }

formatDate4db関数は何をしますか?文字列内のダッシュをスラッシュに置き換えるのはなぜですか?
braindigitalis

formatDate4db関数は日付を渡し、データベースmysql形式、およびstr_replace関数のような形式を作成します。日付形式は2019/12/10で、次のものに置き換えます
Muhammad Awais Zulifqar

-4
$date = '2013-01-22';
$time = strtotime($date) + 86400;
echo date('Y-m-d', $time);

ここで、86400は1日の秒数です。


11
いいえ、1日が常に86400秒であるとは限りません。
nickb

問題はありません。@nickbについて説明してください
Aiyion.Prime

@ Aiyion.Primeの夏時間への切り替え、または夏時間からの切り替えは86400秒ではありません
dumazy

私はそれを考えました、DSTは2時に開始されるので、別の日付になることはありませんか?
Aiyion.Prime

問題は夏時間ではありません。データベース内の時刻は、実際には夏時間のないUTCとして保存する必要があります。日付をUTCで保存している場合、これは問題なく機能しますが、少し鈍感です。
braindigitalis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.