2012-05-17 20 views
9

mam datę w tym formacie (RRRRMM):Bieżąca data minus 4 miesiące?

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

Powiedzmy od 201203 chcę odjąć 4 miesiące. Nie mogę tego zrobić, bo to 201203 - 4 = 201199

201203 - 4 powinny wyjście 201111 (listopad 2011)

Może należy przekonwertować mój ciąg do daty, a następnie przekazać go do strtotime z -4 miesiąca?

Wszelkie sugestie?

+0

przyjrzeć funkcji wybuchnąć i mktime. –

+2

@OZ_, jaka pomoc mogłaby wybuchnąć tutaj? –

+0

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

Odpowiedz

0

Możesz użyć strtotime, aby przekonwertować ciąg znaków na znacznik UNIX, który jest w sekundach. time() podaje aktualny znacznik czasu UNIX. Odejmować je dostać jak stary data jest w sekundach i podzielić przez 60*60*24 je zdobyć w dniach

0

Tak, można konwertować ciąg do daty (timestamp w rzeczywistości) i przekazać go do strtotime():

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

strtotime() może to zrobić, ale trzeba będzie dodać dzień miesiąca, za to do analizować datę:

$input = '201203'; 

$input .= '01'; 

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

echo date('Ym', $date); 

Wyjścia lis 2011:

201111 
+1

To działało idealnie dla mnie, dziękuję bardzo. –

8

Oprócz wersji strtotime, od PHP 5.3 można również użyć DateTime i DateInterval:

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

dla EX $ da = 2014-04-01

jeśli u chcą minus 6 miesięcy używać tego ..

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

echo $ final;

0

Poprzedni kod nie działa:

$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; 

lutego brakuje!

+0

brakuje tylko 29 lutego – 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; 

na metę ten kod dostaniesz 01.05.2016 00: 00: 00,000000

Powiązane problemy