$ 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.