2012-05-17 26 views
9

Ich habe Datum in diesem Format (YYYYMM):Aktuelles Datum minus 4 Monate?

201201 // Gen, 2012 
201202 // Feb, 2012 
201203 // ecc 

die von 201203 I 4 Monate subtrahieren wollen sagen lassen. Ich kann 201203 - 4 nicht tun, weil es = 201199

201203 - 4 sollte eine Ausgabe 201111 (Nov 2011)

Vielleicht lese ich meine Zeichenfolge in ein Datum umwandeln soll und dann übergeben Sie es mit -4 Monat strtotime?

Irgendwelche vorschlagen?

+0

Blick auf Funktionen explodieren und mktime. –

+2

@OZ_, welche Hilfe würde hier explodieren? –

+0

http://php.net/manual/en/function.mktime.php –

Antwort

0

Sie können die Zeichenfolge strtotime in einen UNIX-Zeitstempel (in Sekunden) konvertieren. time() gibt Ihnen den aktuellen UNIX-Zeitstempel. Subtrahieren sie zu erhalten, wie alt das Datum in Sekunden, und teilen, indem er 60*60*24, um es in Tagen

0

Ja, können Sie die Zeichenfolge in ein Datum (Zeitstempel in der Tat) umwandeln und übergeben es an strtotime():

$dateString = "201201"; 
$minusFourMonth = strtotime(
    "-4 month", 
    strtotime(
     substr($dateString, 0, 4) . "-" . substr($dateString, 4, 2) . "-01" 
    ) 
); 
echo date("Ym", $minusFourMonth); // 201109 
8

strtotime() es tun können, aber Sie werden einen Tag des Monats hinzufügen müssen, dafür zu analysieren Sie das Datum:

$input = '201203'; 

$input .= '01'; 

$date = strtotime($input .' -4 months'); 

echo date('Ym', $date); 

Ausgänge November 2011:

201111 
+1

Dies funktionierte perfekt für mich, vielen Dank. –

8

Neben den strtotime Versionen seit 5.3 PHP können Sie auch DateTime verwenden und DateInterval:

$date = DateTime::createFromFormat("Ym", "201201"); 
$interval = new DateInterval("P4M"); // 4 months 
$fourMonthsEarlier = $date->sub($interval); 
echo $fourMonthsEarlier->format("Ym"); 
0

für EX $ da = 2014-04-01

wenn u wollen minus 6 Monate verwenden diese ..

$date = strtotime($da .' -4 months'); 
$final=date('Y-m-d', $date); 

echo $ final;

0

Zurück Code nicht funktioniert:

$da='2014-08-29'; 
$date = strtotime($da .' -6 months'); 
$final=date('Y-m-d', $date); 
echo $final; 
$date = strtotime($da .' -7 months'); 
$final=date('Y-m-d', $date); 
echo $final; 

Februar fehlt!

+0

nur 29. Februar fehlt – vladkras

-1
$date = '2016-09-01 00:00:00.000000'; 

$date2 = date("Y-m-d H:i:s.u", strtotime($date." -4 months")); 

echo $date2; 

auf diesen Code ausführen Sie 2016.05.01 00 erhalten wird: 00: 00,000000