지난달 날짜를 얻고 싶습니다. 나는 이것을 썼다.
$prevmonth = date('M Y');
현재 월 / 년을 제공합니다. strtotime
, 을 사용해야하는지 알 수 없습니다 mktime
. 타임 스탬프에 뭔가? 내 사이트의 모든 타임 스탬프에 대해 모든 날짜가 지난 달로 설정되지 않도록 나중에 재설정하려면 무언가를 추가해야합니까? RTM을 시도하고 있지만 이것을 파악하기가 어렵습니다.
답변:
지난달 날짜를 얻는 것은 간단합니다
echo date("Y-n-j", strtotime("first day of previous month"));
echo date("Y-n-j", strtotime("last day of previous month"));
11 월 3 일 반환
2014-10-1
2014-10-31
echo strtotime("-1 month");
지난달의 타임 스탬프가 정확하게 출력됩니다. 나중에 아무것도 재설정 할 필요가 없습니다. 그 이후에 영어 형식으로 원하는 경우 date () 를 사용하여 타임 스탬프 형식을 지정할 수 있습니다 .
echo date("Y-m-d H:i:s",strtotime("-1 month"));
오답은 다음과 같습니다.
$lastMonth = date('M Y', strtotime("-1 month"));
$lastDate = date('Y-m', strtotime('last month'));
그 이유는 당월이 30 일 이상이지만 이전 달이 29 일이고 $ lastMonth가 적 으면 당월과 동일합니다.
예 :
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
정답은 다음과 같습니다.
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
지난달 만 받고 싶다면 다음과 같이 사용할 수 있습니다.
$prevmonth = date('M Y', strtotime('-1 months'));
전월과 같은 날을 얻고 싶다면 다음과 같이 사용할 수 있습니다 ..
$prevmonth = date('M Y d', strtotime('-1 months'));
이전 달의 마지막 날짜를 얻으려면 다음과 같이 사용할 수 있습니다 ...
$prevmonth = date('M Y t', strtotime('-1 months'));
이전 달의 첫 번째 날짜를 얻으려면 다음과 같이 사용할 수 있습니다 ...
$prevmonth = date('M Y 1', strtotime('-1 months'));
이전 달이 현재보다 짧을 때이 문제를 발견했습니다.
echo date("Y-m-d H:i:s",strtotime("-1 month"));
3 월 30 일에 시도하면 2012-02 대신 2012-03-01을 받게됩니다.
더 나은 솔루션을 찾는 중 ...
public function getLastMonth() {
$now = new DateTime();
$lastMonth = $now->sub(new DateInterval('P1M'));
return $lastMonth->format('Ym');
}
2015-10-31
PHP 5.5 및 5.6.11에서는 작동하지 않습니다 . 201510
와 같은 동작을 얻게 됩니다 strtotime('- 1 month)
.
내가 찾은 최고의 솔루션은 다음과 같습니다.
function subtracMonth($currentMonth, $monthsToSubtract){
$finalMonth = $currentMonth;
for($i=0;$i<$monthsToSubtract;$i++) {
$finalMonth--;
if ($finalMonth=='0'){
$finalMonth = '12';
}
}
return $finalMonth;
}
따라서 우리가 3 (3 월)에 있고 5 개월을 빼고 싶다면
subtractMonth(3,5);
10 (10 월)이됩니다. 연도도 원하는 경우 다음을 수행 할 수 있습니다.
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
}
나를 위해 작동합니다.
오늘 : 2012 년 3 월 31 일
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
전월의 첫 번째 날짜를 얻으려면 다음과 같이 사용할 수 있습니다 ... $prevmonth = date('M Y 1', strtotime('-1 months'));
what? 첫 번째 날짜는 항상 1 : D입니다.
지난달에 받기만하면됩니다.
오늘 : 2020-09-02
암호:
echo date('Y-m-d', strtotime(date('Y-m-d')." -1 month"));
결과:
2020-08-02
31
1 월이나 8 월이 아닌 경우 어떻게되는지 설명하는 것도 고려해야합니다 (예 : 2020 May 31
는 2020 April 31
존재하지 않음)
$time = strtotime('2011-03-30 01:01:01'); echo date('r', strtotime('-1 month', $time));
이 코드 는 2 월이 아닌 Wed, 02 Mar 2011 01:01:01을 반환합니다! 사용strtotime('first day of previous month')
대신에