2009-12-11 3 views
62

Voglio ottenere la data del mese scorso. Ho scritto questo:Ottenere la data del mese scorso in php

$prevmonth = date('M Y'); 

Quale mi dà il mese corrente/anno. Non posso dire se dovrei usare strtotime, mktime. Qualcosa al timestamp? Devo aggiungere qualcosa in seguito per reimpostare in modo che la data non sia impostata sul mese scorso in tutto per tutti i timestamp sul mio sito? Sto provando a RTM ma è difficile per me capirlo.

risposta

156

E 'semplice per ottenere l'ultima data mese

echo date("Y-n-j", strtotime("first day of previous month")); 
echo date("Y-n-j", strtotime("last day of previous month")); 

al 3 novembre ritorna

2014-10-1 
2014-10-31 
+6

Questo non è abbastanza buono e può causare errori nel codice: '$ time = strtotime ('2011-03-30 01:01:01'); echo date ('r', strtotime ('- 1 mese', $ time));' questo restituirà Wed, 02 mar 2011 01:01:01 - non febbraio! Usa 'strtotime ('primo giorno del mese precedente')' invece – Ostin

+0

hai ragione, grazie – OzzyCzech

+0

@OzzyCzech Torna l'1 e il 31 ottobre quando lo esegui il 3 marzo? –

24
echo strtotime("-1 month"); 

Quello restituirà il timestamp esattamente per l'ultimo mese. Non è necessario reimpostare nulla in seguito. Se si desidera in un formato inglese dopo che, è possibile utilizzare date() per formattare il timestamp, vale a dire:

echo date("Y-m-d H:i:s",strtotime("-1 month")); 
+9

Oggi è il 31 ottobre 2012. data ("Y-m-d", strtotime ("- 1 mese")); Resi 2012-10-01. :( – Todd

+7

@toddsler Corretto. -1 mese è lo stesso della scrittura di -30 giorni che in certe date durante l'anno o salteranno 1 mese o rimarranno nello stesso mese, quindi fai attenzione con questo metodo – silkfire

1

Oh ho capito questo, si prega di ignorare se non si ha lo stesso problema che ho fatto in questo caso:

$prevmonth = date("M Y",mktime(0,0,0,date("m")-1,1,date("Y"))); 
19
$prevmonth = date('M Y', strtotime("last month")); 
+1

Questo è lo stesso come data ('M Y', strtotime ("- 1 month")), se fai qualcosa come data ('M Y', strtotime ("2017-07-31 lo scorso mese")) restituirà 2017-07- 01, quindi fai attenzione! Data ('M Y', strtotime ('2017-07-31 primo giorno del mese precedente')) ti darebbe quello che vuoi – Shadowbob

1

è possibile utilizzare strtotime, che è grande in questo tipo di situazioni:

$timestamp = strtotime('-1 month'); 
var_dump(date('Y-m', $timestamp)); 

si arriva:

string '2009-11' (length=7) 
5

trovato questo uno sbagliato quando i mesi precedenti è più breve rispetto agli attuali.

echo date("Y-m-d H:i:s",strtotime("-1 month")); 

Prova marzo il 30 e si otterrà 2012-03-01 anziché 2012-02 ...

Lavorando sulla soluzione migliore ...

+1

Questa risposta è corretta (-1 mese non funzionerà correttamente in tutti i casi). Per il mese precedente, usa strtotime ('ultimo mese'). – Mike

+0

Il mese scorso o il mese -1 restituisce lo stesso valore. –

4
echo date('Y',strtotime("-1 year"));  //last year<br> 
echo date('d',strtotime("-1 day"));  //last day<br> 
echo date('m',strtotime("-1 month"));  //last month<br> 
1
$time = mktime(0, 0, 0, date("m"),date("d")-date("t"), date("Y")); 
$lastMonth = date("d-m-Y", $time); 

O

$lastMonth = date("m-Y", mktime() - 31*3600*24); 

opere su 30.03.2012

0

funziona per me:

Oggi è: 31/03/2012

echo date("Y-m-d", strtotime(date('m', mktime() - 31*3600*24).'/01/'.date('Y').' 00:00:00')); // 2012-02-01 
echo date("Y-m-d", mktime() - 31*3600*24); // 2012-02-29 
+0

In funziona solo nel 58,3 (3)% dei casi. Che dire di febbraio, aprile, giugno, settembre e novembre? Non hanno 31 giorni. – bostaf

3
public function getLastMonth() { 
    $now = new DateTime(); 
    $lastMonth = $now->sub(new DateInterval('P1M')); 
    return $lastMonth->format('Ym'); 
} 
+0

Non funzionerà per '2015-10-31' in PHP 5.5 e 5.6.11. Otterrai '201510' - stesso comportamento come per' strtotime ('- 1 mese) '. – pmayer

0

Utilizzare questo breve codice per ottenere precedente mese per ogni data:

$tgl = '25 january 2012'; 

$prevmonth = date("M Y",mktime(0,0,0,date("m", strtotime($tgl))-1,1,date("Y", strtotime($tgl)))); 
echo $prevmonth; 

Il risultato è dicembre 2011. Funziona su un mese con giorno più breve con mese precedente.

7

se si desidera ottenere solo il mese precedente, quindi è possibile utilizzare come come seguire

$prevmonth = date('M Y', strtotime('-1 months')); 

se si desidera ottenere stessi giorni del mese precedente, allora si può usare come come seguire ..

$prevmonth = date('M Y d', strtotime('-1 months')); 

se si desidera ottenere ultima data del mese precedente, quindi è possibile utilizzare come come seguire ...

$prevmonth = date('M Y t', strtotime('-1 months')); 

se si desidera ottenere prima data del mese precedente, allora si può usare come come seguire ...

$prevmonth = date('M Y 1', strtotime('-1 months')); 
+0

Fai attenzione per il 31 del mese! Ti darà il 1 ° del mese corrente! Vedi sopra. – Shadowbob

0

Se si desidera ottenere prima data del mese precedente, quindi è possibile utilizzare come come seguire ... $prevmonth = date('M Y 1', strtotime('-1 months')); cosa? il primo appuntamento sarà sempre 1: D

0

Questa domanda è piuttosto vecchia ma qui va comunque. Se stai cercando di ottenere solo il mese precedente e il giorno non importa è possibile utilizzare questo:

$date = '2014-01-03'; 

$dateTime = new DateTime($date); 

$lastMonth = $dateTime->modify('-' . $dateTime->format('d') . ' days')->format('F Y'); 

echo $lastMonth; // 'December 2013' 
1
$lastMonth = date('M Y', strtotime("-1 month")); 
var_dump($lastMonth); 
$lastMonth = date('M Y', mktime(0, 0, 0, date('m') - 1, 1, date('Y'))); 
var_dump($lastMonth); 
+1

Mentre il codice stesso può essere in qualche modo auto esplicativo, è utile agli altri utenti spiegare la tua risposta piuttosto che dare semplicemente del codice. – Turnerj

4

Le risposte sbagliate sono:

$lastMonth = date('M Y', strtotime("-1 month")); 
$lastDate = date('Y-m', strtotime('last month')); 

La ragione è che se corrente il mese è di 30+ giorni ma il mese precedente è 29 e meno $ lastMonth sarà uguale al mese corrente.

ad es.

If $currentMonth = '30/03/2016'; 
echo $lastMonth = date('m-Y', strtotime("-1 month")); => 03-2016 
echo $lastDate = date('Y-m', strtotime('last month')); => 03-2016 
echo $lastMonth = date('m-Y', strtotime("-1 month")); => 03-2016 

La risposta corretta sarà:

echo date("m-Y", strtotime("first day of previous month")); => 02-2016 
echo sprintf("%02d",date("m")-1) . date("-Y"); => 02-2016 
echo date("m-Y",mktime(0,0,0,date("m")-1,1,date("Y"))); => 02-2016