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.