2012-04-12 10 views
5

を働いていない、私は私が2012-04-27を得るために期待していた日付(2012-04-12)に$days(15日)を追加するために探していますPHPの日付のstrtotime

echo date("Y-m-d", strtotime($date, strtotime("+ " . $days . " days"))); 

$date = 2012-04-12 
$days = 15 

コードのこの部分を書き、このコードは私に2012-04-12を返します。私は何を間違えているのですか?

答えて

8
echo date('Y-m-d', strtotime('+15 days', strtotime('2012-04-12'))); 
+0

ありがとう、ちょうど私が探していたもの:) – user979331

0

DateTimeクラスを使用しないのはなぜですか?

$date = new DateTime(); 
$date->add(new DateInterval('P15D')); 
1
echo date("Y-m-d", strtotime("+$days days", $date)); 
5

)(のstrtotimeを使用しないでください。それは本当に信頼できませんが、本当にあなたは腰の中であなたを噛ませるために本当に戻ってくるものは何もしていません。しかし、strtotimeに依存することは、あなたの人生をある時点で惨めなものにするので、まだ悪いことです。

使用DateTime代わり:

$now = DateTime::CreateFromFormat('Y-m-d', '2012-04-12'); 
$then = $now->add(new DateInterval('P15D')); 
$date = $then->format('Y-m-d'); 
+6

'strtotime()'は信頼できません。実際、DateTimeクラスはシートの下でそれを使用します。 –

+0

ええ、もしあなたが自動検出のものなら。しかし、既知の形式の日付がある場合は、strtotimeはまったく使用しないでください。 –

+2

私は原則としてあなたに同意しますが、Marc、しかし私は、何かを行うためにオブジェクトをインスタンス化する必要性について尋ねます。彼がタイムゾーンの変更や他のより高度な操作を行うつもりなら、そのオブジェクトを絶対に使用してください。単純に数日を追加するには? Meh。 –

2
$date = '2012-04-12'; 
$days = 15; 
echo date('Y-m-d', strtotime("$date +$days days")); 
1

あなたの構文が正しくありません。コードをすべて1行に配置する必要はありません。この場合、そのようにしようとすると構文上の問題が発生することがわかります。いくつか余分な小さな変数を恐れてはいけません!

$date = '2012-04-12'; 
$days = 15; 

$ts = strtotime($date); 
$new_ts = strtotime('+'.$days.' days', $ts); 
$new_date = date('Y-m-d', $new_ts); 

明確で読みやすく、簡単にデバッグできます。あなたのコードゴルフのような場合は、1行にそれを置くことができますが、それを書くための明確な方法があります:

$new_date = date (
    'Y-m-d', 
    strtotime (
     '+'.$days.' days', 
     strtotime($date) 
    ) 
); 

ドキュメント

関連する問題