$ date + 1 년?


87

내가 지정한 날짜로부터 1 년이되는 날짜를 얻으려고합니다.

내 코드는 다음과 같습니다.

$futureDate=date('Y-m-d', strtotime('+one year', $startDate));

잘못된 날짜를 반환합니다. 이유는 무엇입니까?


9
오류에 대해 말하는 것을 잊었습니다.
— BalusC 2009

Frank Farmer : 그렇게 확신하십니까? 차라리 OP의 수정 / 댓글을 기다립니다.
— BalusC 2009

어젯밤에이 게시물을 서둘러서 설명하는 것을 잊었습니다. 잘못된 날짜를 반환했습니다. 죄송합니다! 당신의 도움을 주셔서 감사합니다.
— Matt

1
대신 다음과 같이 사용하십시오. strtotime ( '+ 1 year', $ startDate));
— casivaagustin

답변:


97

오늘 날짜에 1 년을 추가하려면 다음을 사용하십시오.

$oneYearOn = date('Y-m-d',strtotime(date("Y-m-d", mktime()) . " + 365 day"));

다른 예의 경우 타임 스탬프 값으로 $ StartingDate를 초기화해야합니다. 예를 들면 다음과 같습니다.

$StartingDate = mktime();  // todays date as a timestamp

이 시도

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 365 day"));

또는

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));

"+1 year"대신 "+365"를 추가했습니다. 감사!
— Matt

16
윤년이되면 깨지지 않을까요?
— Jeremy1026

1
PHP 5.1에서 인수없이 호출하면 mktime ()은 E_STRICT 알림을 표시합니다. 대신 time () 함수를 사용합니다.
— svandragt 2014 년

여기에서도 반대표를 던졌습니다. 하루의 초, 1 년의 일, 1 년의 초 등은 모두 가변적입니다. '지금부터 1 년'에 관심이 있다면 '1 년'간격으로 통과해야합니다. 스스로 세분화하면 윤일, 윤초 및 일광 절약 시간에 오류가 발생합니다. 더 나쁜 것은 엉성한 단위 테스트를 유발합니다.
— drobert 2014-08-15

내 대답이 반대표를받는 이유는 무엇입니까? $ addedoneyear = date ( "y") + 1; // 1 년을 추가하기 위해 무엇이 문제입니까?
— pathe.kiran

212
$futureDate=date('Y-m-d', strtotime('+1 year'));

$ futureDate는 지금부터 1 년 후입니다!

$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );

$ futureDate는 $ startDate로부터 1 년입니다!


$ startDate가 이미 타임 스탬프 (예 : time () 또는 mktime () 함수로 이전에 생성 된 타임 스탬프)이고 문자열이 아닌 경우 strtotime으로 래핑해서는 안됩니다. 그렇지 않으면 작동하지 않습니다. 대신 $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));아래에 언급 된 K Prime으로하십시오.
— dallin

9

시험: $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));


그것은 정답을 반환하지만 다른 하나는 실제로 오류를 반환하지 않습니다 ... 단지 잘못된 날짜입니다.
— SeanJA 2009

1
strtotime은 오류를 발생시키지 않습니다. 오류가 발생하면 false를 반환합니다.
— Frank Farmer

기본 시간대가 설정되지 않은 경우 PHP는 그가 무엇을 의미하는지 아니라고하지만 분명히 ... 경고가 발생합니다
— SeanJA

나는이 변경 코드에 오류가 발생했다 ,를 .하고 일했다 date("Y-m-d",strtotime('+1 year '.$startDate));
— Muhammad Bilal

7
// Declare a variable for this year 
$this_year = date("Y");
// Add 1 to the variable
$next_year = $this_year + 1;
$year_after = $this_year + 2;

// Check your code
    echo "This year is ";
    echo $this_year;
    echo "<br />";
    echo "Next year is ";
    echo $next_year;
    echo "<br />";
    echo "The year after that is ";
    echo $year_after;

6

같은 문제가 있었지만 이것이 가장 간단한 해결책이었습니다.

<?php (date('Y')+1).date('-m-d'); ?>

$next_year = (date('Y')+1)좋습니다. 다음 해에 .
— Martin

5
//1 year from today's date
echo date('d-m-Y', strtotime('+1 year'));

//1 year from from specific date
echo date('22-09-Y', strtotime('+1 year'));

이 간단한 코드가 미래의 누군가에게 도움이되기를 바랍니다. :)


4

OO 접근 방식을 선호합니다.

$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time.
$futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))

사용 DateTimeImmutable그렇지 않으면 당신도 원래의 날짜를 수정합니다! DateTimeImmutable에 대한 추가 정보 : http://php.net/manual/en/class.datetimeimmutable.php


오늘 날짜부터 원하는 경우 언제든지 다음을 수행 할 수 있습니다.

new \DateTimeImmutable('-1 Month');

3

PHP 5.3을 사용하는 경우 기본 시간대를 설정해야하기 때문입니다.

date_default_timezone_set()

3

strtotime()bool(false)문자열을 구문 분석 할 수 없기 때문에를 반환 합니다 '+one year'( "하나"를 이해하지 못함). false그런 다음 암시 적으로 integer타임 스탬프로 캐스팅됩니다 0. 다른 함수에 밀어 넣기 전에 strtotime()의 출력이 아닌지 확인하는 것이 좋습니다 bool(false).

문서에서 :

반환 값

성공하면 타임 스탬프를 반환하고 그렇지 않으면 FALSE를 반환합니다. PHP 5.1.0 이전에는이 ​​함수가 실패시 -1을 반환했습니다.


네, 좋은 지적입니다. 내 프로덕션 코드는 그것을 가질 것이지만, 이것을 작동시키기 위해 머리카락을 찢어 버렸기 때문에 가능한 한 적은 코드로 제거했습니다. 감사!
— Matt

2

이 시도

$nextyear  = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)),   date("d",strtotime($startDate)),   date("Y",strtotime($startDate))+1));

1

더 간단하고 덜 정교한 솔루션도 있습니다.

$monthDay = date('m/d');
$year = date('Y')+1;
$oneYearFuture = "".$monthDay."/".$year."";
echo"The date one year in the future is: ".$oneYearFuture."";

1

내 솔루션은 다음과 같습니다. date('Y-m-d', time()-60*60*24*365);

정의를 사용하여 더 "가독성"을 높일 수 있습니다.

define('ONE_SECOND', 1);
define('ONE_MINUTE', 60 * ONE_SECOND);
define('ONE_HOUR',   60 * ONE_MINUTE);
define('ONE_DAY',    24 * ONE_HOUR);
define('ONE_YEAR',  365 * ONE_DAY);

date('Y-m-d', time()-ONE_YEAR);

-1

제 경우에는 (현재 날짜에 3 년을 추가하고 싶습니다) 해결책은 다음과 같습니다.

$future_date = date('Y-m-d', strtotime("now + 3 years"));

Gardenee, Treby 및 Daniel Lima에게 : 2 월 29 일에는 어떤 일이 일어날까요? 때때로 2 월은 28 일 밖에 없습니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.