2017-12-31 68 views
1

私はPHPの日付に30年を追加したいと思います。 20年間でうまくいっていますが、20年を30年に置き換えると、デフォルトの日付が表示されます。このような1970年1月1日。これは私がやったことです。30年前の日付を追加する

$created_date = '2017-12-30 08:30:27' 

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

echo $futureDate; 

O/P:

1970-01-01 

任意のアイデアなぜですか?

+0

あなたのコード(http://rextester.com/MVPKLN62374)[私のために働いています]。問題の再現可能な例を投稿できますか? –

+0

でも問題はありませんhttps://ideone.com/2Xp7PS – Ravi

+0

おそらくタイムスタンプを超えています。今から何年ものタイムスタンプはもはや機能しません。私たちは2000年の問題を抱えていましたが、タイムスタンプが最大値に達するともう一つの問題になります。 – halojoy

答えて

4

あなたはを使用することができます

<?php 

$created_date = '2017-12-30 08:30:27'; 

$EndDateTime = DateTime::createFromFormat('Y-m-d H:i:s', $created_date); 
$EndDateTime->modify('+30 years'); 
echo $EndDateTime->format('Y-m-d H:i:s'); 

出力: - https://eval.in/928779

4

は32ビットで2038

は、この問題を回避していた代わりにDateTimeクラスを使用して、その年後の日付を扱うことができない不具合があった2038年

PHP 5.3+のためにPHP 5.2の場合
$date = new DateTime('2017-12-30'); 
$date->add(new DateInterval('Y30')); 
echo $date->format('Y-m-d'); 

$date = new DateTime('2017-12-30'); 
$date->modify('+30 year'); 
echo $date->format('Y-m-d'); 
+0

これは制限を課すバグではありません。これは32ビットコンピュータが処理できる最大数です。私はそれが欠陥だがバグではないことに同意することができる。 – Andreas

関連する問題