2010-04-12 13 views

risposta

58

Hm, forse qualcosa del genere;

echo date("F 1, Y", strtotime("-6 months")); 

MODIFICA;

se si desidera specificare un uso di data personalizzato;

echo date("F, 1 Y", strtotime("-6 months", strtotime("Feb 2, 2010"))); 
+2

A parte la virgola che si trova nel posto sbagliato nella stringa di formato, questa sembra la soluzione migliore (al momento, mostrerebbe "1 ottobre 2009" invece di "1 ottobre 2009"). – Powerlord

+0

+1 per essere intelligente :) –

+0

al momento questo mostra »1 ott. 2009« – knittl

9

utilizzano una combinazione di mktime e date:

$date_half_a_year_ago = mktime(0, 0, 0, date('n')-6, 1, date('y')) 

per rendere la data nuova rispetto ad una certa data e non oggi, chiamare date con un secondo parametro

$given_timestamp = getSomeDate(); 
$date_half_a_year_ago = mktime(0, 0, 0, date('n', $given_timestamp)-6, 1, date('y', $given_timestamp)) 

di output formattato , utilizzare semplicemente date di nuovo:

echo date('F j, Y', $date_half_a_year_ago); 
+0

Non ho PHP qui per testare questo, ma mktime accetta anche mesi negativi? È documentato come restituire false per argomenti non validi. – Powerlord

+0

@omg unicorns, sì, dai documenti: »mktime() è utile per fare aritmetica data e validazione, poiché calcolerà automaticamente il valore corretto per l'input fuori range.« – knittl

7

Un po 'hacker ma funziona:

<?php 

$date = new DateTime("-6 months"); 
$date->modify("-" . ($date->format('j')-1) . " days"); 
echo $date->format('j, F Y'); 

?> 
+1

Oh, hey, non l'ho fatto realizzato il costruttore di DateTime accettato -6 mesi. Mi sento stupido ora. – Powerlord

Problemi correlati