Chcę poznać datę z ostatniego miesiąca. Napisałem to:
$prevmonth = date('M Y');
Co daje mi bieżący miesiąc / rok. Nie mogę powiedzieć, czy powinno się używać strtotime
, mktime
. Coś do sygnatury czasowej? Czy muszę później coś dodać, aby zresetować, tak aby data nie była ustawiona na ostatni miesiąc we wszystkim dla wszystkich sygnatur czasowych w mojej witrynie? Próbuję RTM, ale ciężko mi to rozgryźć.
$time = strtotime('2011-03-30 01:01:01'); echo date('r', strtotime('-1 month', $time));
ten zwróci Wed, 02 Mar 2011 01:01:01 - nie luty! Użyjstrtotime('first day of previous month')
zamiast tegoecho strtotime("-1 month");
Spowoduje to wyświetlenie dokładnego sygnatury czasowej z ostatniego miesiąca. Nie musisz później niczego resetować. Jeśli chcesz, aby później był w formacie angielskim, możesz użyć date () do sformatowania znacznika czasu, tj .:
echo date("Y-m-d H:i:s",strtotime("-1 month"));
źródło
$prevmonth = date('M Y', strtotime("last month"));
źródło
Niepoprawne odpowiedzi to:
$lastMonth = date('M Y', strtotime("-1 month")); $lastDate = date('Y-m', strtotime('last month'));
Powodem jest to, że bieżący miesiąc to ponad 30 dni, ale poprzedni to 29 i mniej $ lastMonth będzie taki sam jak bieżący miesiąc.
na przykład
If $currentMonth = '30/03/2016'; echo $lastMonth = date('m-Y', strtotime("-1 month")); => 03-2016 echo $lastDate = date('Y-m', strtotime('last month')); => 2016-03
Prawidłowa odpowiedź to:
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
źródło
jeśli chcesz uzyskać tylko poprzedni miesiąc, możesz użyć jako następującego
$prevmonth = date('M Y', strtotime('-1 months'));
jeśli chcesz uzyskać te same dni z poprzedniego miesiąca, możesz użyć w następujący sposób ..
$prevmonth = date('M Y d', strtotime('-1 months'));
jeśli chcesz uzyskać ostatnią datę poprzedniego miesiąca, możesz użyć jako następującego ...
$prevmonth = date('M Y t', strtotime('-1 months'));
jeśli chcesz uzyskać pierwszą datę poprzedniego miesiąca, możesz użyć jako następującego ...
$prevmonth = date('M Y 1', strtotime('-1 months'));
źródło
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>
źródło
Znalazłem ten błąd, gdy poprzednie miesiące są krótsze niż obecne.
echo date("Y-m-d H:i:s",strtotime("-1 month"));
Wypróbuj 30 marca, a zamiast 2012-02 otrzymasz 2012-03-01 ...
Opracowanie lepszego rozwiązania ...
źródło
public function getLastMonth() { $now = new DateTime(); $lastMonth = $now->sub(new DateInterval('P1M')); return $lastMonth->format('Ym'); }
źródło
2015-10-31
w PHP 5.5 i 5.6.11. Otrzymasz201510
- takie samo zachowanie jak w przypadkustrtotime('- 1 month)
.Użyj tego krótkiego kodu, aby uzyskać poprzedni miesiąc dla dowolnej daty:
$tgl = '25 january 2012'; $prevmonth = date("M Y",mktime(0,0,0,date("m", strtotime($tgl))-1,1,date("Y", strtotime($tgl)))); echo $prevmonth;
Wynik to grudzień 2011. Działa na miesiąc z krótszym dniem w porównaniu z poprzednim miesiącem.
źródło
$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);
źródło
Możesz użyć
strtotime
, co jest świetne w tego rodzaju sytuacjach:$timestamp = strtotime('-1 month'); var_dump(date('Y-m', $timestamp));
Dostaniesz:
string '2009-11' (length=7)
źródło
$time = mktime(0, 0, 0, date("m"),date("d")-date("t"), date("Y")); $lastMonth = date("d-m-Y", $time);
LUB
$lastMonth = date("m-Y", mktime() - 31*3600*24);
działa w dniu 30.03.2012r
źródło
Och, wymyśliłem to, zignoruj, chyba że masz ten sam problem, co w takim przypadku:
$prevmonth = date("M Y",mktime(0,0,0,date("m")-1,1,date("Y")));
źródło
Najlepsze rozwiązanie jakie znalazłem to:
function subtracMonth($currentMonth, $monthsToSubtract){ $finalMonth = $currentMonth; for($i=0;$i<$monthsToSubtract;$i++) { $finalMonth--; if ($finalMonth=='0'){ $finalMonth = '12'; } } return $finalMonth; }
Więc jeśli mamy 3 (marzec) i chcemy odjąć 5 miesięcy, to by było
subtractMonth(3,5);
co dałoby 10 (październik). Jeśli rok jest również pożądany, można to zrobić:
function subtracMonth($currentMonth, $monthsToSubtract){ $finalMonth = $currentMonth; $totalYearsToSubtract = 0; for($i=0;$i<$monthsToSubtract;$i++) { $finalMonth--; if ($finalMonth=='0'){ $finalMonth = '12'; $totalYearsToSubtract++; } } //Get $currentYear //Calculate $finalYear = $currentYear - $totalYearsToSubtract //Put resulting $finalMonth and $finalYear into an object as attributes //Return the object }
źródło
Mi to pasuje:
Dzisiaj jest: 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
źródło
Jeśli chcesz uzyskać pierwszą datę poprzedniego miesiąca, możesz użyć jako następujących po ...
$prevmonth = date('M Y 1', strtotime('-1 months'));
co? pierwsza data zawsze będzie 1: Dźródło
To pytanie jest dość stare, ale tak czy inaczej. Jeśli próbujesz uzyskać tylko poprzedni miesiąc, a dzień nie ma znaczenia, możesz użyć tego:
$date = '2014-01-03'; $dateTime = new DateTime($date); $lastMonth = $dateTime->modify('-' . $dateTime->format('d') . ' days')->format('F Y'); echo $lastMonth; // 'December 2013'
źródło
Po prostu otrzymaj w zeszłym miesiącu.
Przykład:
Dzisiaj jest: 2020-09-02
Kod:
echo date('Y-m-d', strtotime(date('Y-m-d')." -1 month"));
Wynik:
źródło
31
a miesiąc nie jest styczniem lub sierpniem (jak2020 May 31
się stanie2020 April 31
, że nie istnieje)