PHP, 날짜에서 내일 날짜 가져 오기


89

형태의 PHP 날짜 2013-01-22가 있고 같은 형식으로 내일 날짜를 얻고 싶습니다 2013-01-23.

PHP로 어떻게 가능합니까?

답변:


205

DateTime 사용

$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
이것은 현재를 사용하므로 주어진 날짜를 전달해야합니다.
Justin

두 번째 방법이 아마도 가장 좋습니다.
nickb

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

또는

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

도움말 링크 : STRTOTIME ()


1
나는 이것을 사용했고 모든 답변 중 가장 짧고 간단한 버전입니다. 감사합니다!
Bombelman

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 2008


3

사용 DateTime:

지금부터 내일을 얻으려면 :

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

결과 : 28/06/2017 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 년 11 월 6 일 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. 적어도 두 가지 구현이 있습니다. 첫 번째는 문자열에서 파싱 된 datetime이고 두 번째는 내일입니다. 따라서 사용할 수있는 두 가지 클래스가 있으며 이들의 조합은 (거의) 원하는 결과를 가져옵니다.

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일을 가지고로 교체 -
무하마드 Awais Zulifqar

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

여기서 86400은 하루의 초입니다.


11
아니요, 하루에 86400 초가 항상있는 것은 아닙니다.
nickb

나는 문제를 이해하지 못한다. @nickb 설명해주십시오
Aiyion.Prime

@ Aiyion.Prime Days that make the switch to or from daylight saving time에는 86400 초가 없습니다
dumazy

DST가 2시에 시작되므로 다른 날짜를 지정해서는 안됩니까?
Aiyion.Prime 2015

문제는 일광 절약이 아닙니다. 데이터베이스의 시간은 실제로 일광 절약 시간이없는 UTC로 저장되어야합니다. UTC로 날짜를 저장하는 경우 잘 작동하지만 약간 둔합니다.
braindigitalis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.