2012-04-12 15 views
5

Ich schrieb dieses Stück CodePHP date strtotime nicht funktioniert

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

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

Suche $days (15 Tage) zu dem Zeitpunkt hinzufügen (2012-04-12) ich erwarte 2012-04-27 zu bekommen und dieser Code gibt mir 2012-04-12, Was mache ich falsch?

Antwort

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

Danke, genau das, was ich gesucht habe :) – user979331

0

Warum nicht einfach DateTime Klasse verwenden?

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

nicht strtotime() verwenden. Es ist unzuverlässig, obwohl du wirklich nichts machst, das wirklich zurückkommen würde, um dich in den Hintern zu beißen. Aber abhängig von der Zeit ist immer noch eine schlechte Sache, weil es Ihr Leben irgendwann unglücklich machen wird.

Verwenden DateTime statt:

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

'strtotime()' ist nicht unzuverlässig; Tatsächlich verwendet die DateTime-Klasse sie unter den Blättern. –

+0

Ja, wenn Sie die automatische Erkennung sind. Aber wenn Sie ein bekanntes Format Datum haben, dann verwenden Sie keine strtotime überhaupt. –

+2

Ich stimme Ihnen grundsätzlich zu, Marc, aber ich stelle die Frage, ob ein Objekt instanziiert werden muss, um etwas so Triviales zu tun. Wenn er Änderungen in der Zeitzone oder andere fortgeschrittene Operationen machen würde, dann benutze das Objekt absolut. Einfach ein paar Tage hinzufügen? Meh. –

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

Ihre Syntax ist falsch. Es ist nicht notwendig oder sogar hilfreich, Ihren Code alle in einer Zeile zu platzieren. In diesem Fall sehen wir, dass der Versuch, dies zu tun, Syntaxprobleme verursacht. Haben Sie keine Angst vor ein paar extra kleinen Variablen!

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

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

Klar, leicht zu lesen, einfach zu debuggen. Wenn Sie Code gerne Golf spielen, können Sie es in eine Zeile setzen, aber es gibt einen klareren Weg, es zu schreiben:

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

Dokumentation