$ date + 1年?


91

指定した日付から1年後の日付を取得しようとしています。

私のコードは次のようになります:

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

間違った日付を返しています。なぜ何かアイデアはありますか?


9
あなたはエラーについて話すのを忘れました。
BalusC 2009

フランクファーマー:あなたはとても確信していますか?私はむしろOPのretifications /コメントを待ちたいです。
BalusC 2009

昨夜この投稿を急いで、明確にするのを忘れました-それは間違った日付を返していました。ごめんなさい!ご協力いただきありがとうございます。
マット

1
代わりにこのように使用してくださいstrtotime( '+ 1 year'、$ startDate));
casivaagustin 2015

回答:


98

今日の日付に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年」の代わりに「+365」を追加しました。ありがとう!
マット

17
うるう年の場合、この休憩はありませんか?
Jeremy1026 2013年

1
PHP 5.1以降、引数なしで呼び出されると、mktime()はE_STRICT通知をスローします。代わりにtime()関数を使用してください。
svandragt 2014年

ここでも反対票を投じました。1日の秒数、1年の日数、1年の秒数などは、すべて可変です。「今から1年後」に興味があるなら、「1年」の間隔で合格する必要があります。自分で細分化すると、うるう日とうるう秒の前後のエラーや夏時間の変更につながります。さらに悪いことに、それはゆるいユニットテストを引き起こします。
ドロバート2014

なぜ私の答えは反対票を投じられますか?$ addedoneyear = date( "y")+ 1; // 1年を追加するために何が問題になっていますか?
pathe.kiran 2015年

215
$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プライムのようにしてください。
dallin 2018

9

試してみてください: $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));


それは正しい答えを返しますが、もう一方は実際にはエラーも返しません...ちょうど間違った日付です。
SeanJA 2009

1
strtotimeはエラーをスローしません。エラーの場合はfalseを返します。
フランクファーマー

デフォルトのタイムゾーンが設定されていない場合、PHPは警告をスローします...明らかにそれは彼が意図したものではありませんが
SeanJA 2009

変更,したコードでエラーが発生し、.機能しましたdate("Y-m-d",strtotime('+1 year '.$startDate))
ムハンマドビラル

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)
マーティン

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

私はオブジェクト指向アプローチを好みます:

$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'(「1つ」を理解しません)。 false次に、integerタイムスタンプに暗黙的にキャストされ0ます。strtotime()の出力がそうではないことを確認することをお勧めしますbool(false)他の関数に前に、ます。

ドキュメントから:

戻り値

成功した場合はタイムスタンプを返し、それ以外の場合はFALSEを返します。PHP 5.1.0より前では、この関数は失敗すると-1を返しました。


ええ、良い点です。私のプロダクションコードにはそれが含まれていますが、これを機能させるために髪の毛を引き裂いていたので、コードをできるだけ少なくしました。ありがとう!
マット

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.