PHP에서 지난달 날짜 얻기


84

지난달 날짜를 얻고 싶습니다. 나는 이것을 썼다.

$prevmonth = date('M Y');

현재 월 / 년을 제공합니다. strtotime, 을 사용해야하는지 알 수 없습니다 mktime. 타임 스탬프에 뭔가? 내 사이트의 모든 타임 스탬프에 대해 모든 날짜가 지난 달로 설정되지 않도록 나중에 재설정하려면 무언가를 추가해야합니까? RTM을 시도하고 있지만 이것을 파악하기가 어렵습니다.

답변:


208

지난달 날짜를 얻는 것은 간단합니다

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

7
이것은 충분하지 않으며 코드에 오류를 일으킬 수 있습니다. $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')대신에
Ostin

@OzzyCzech 3 월 3 일에 실행하면 10 월 1 일과 31 일을 반환합니까?
The Unknown Dev

$ data_day_str = strtotime ( "이전 달", strtotime ( '2011-03-30 01:01:01')); 당신은 2011 년 월 얻을 것이다
로드리고 Serzedello

31
echo strtotime("-1 month");

지난달의 타임 스탬프가 정확하게 출력됩니다. 나중에 아무것도 재설정 할 필요가 없습니다. 그 이후에 영어 형식으로 원하는 경우 date () 를 사용하여 타임 스탬프 형식을 지정할 수 있습니다 .

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

12
오늘은 2012 년 10 월 31 일입니다. date ( "Ymd", strtotime ( "-1 month")); 2012-10-01을 반환합니다. :(
Todd

7
@toddsler 맞습니다. -1 개월은 -30 일을 쓰는 것과 매우 동일하며, 연중 특정 날짜에 1 개월을 건너 뛰거나 같은 달에 유지되므로이 방법에주의하십시오.
silkfire

이 솔루션을 사용하지 마십시오! 이전 댓글이 정확합니다. 매월 31 일 (또는 3
10 대

19
$prevmonth = date('M Y', strtotime("last month"));

3
date ( 'M Y', strtotime ( "-1 month"))와 동일합니다. date ( 'M Y', strtotime ( "2017-07-31 last month"))와 같은 작업을 수행하면 다음과 같이 반환됩니다. 2017-07-01, 조심하세요! date ( 'M Y', strtotime ( '2017-07-31 이전 달의 첫 번째 날'))은 원하는 것을 제공합니다
Shadoweb

12

오답은 다음과 같습니다.

$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

1
echo sprintf ( "% 02d", date ( "m")-1) 제거하면 찬성합니다. 날짜 ( "-Y"); => 2016 년 2 월. 1 월이면 작년 12 월이 아닌 올해 0 월에 응답합니다!
Tama

6

지난달 만 받고 싶다면 다음과 같이 사용할 수 있습니다.

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

3
매월 31 일을 조심하세요! 이번 달 1 일을드립니다! 위 참조.
Shadoweb

6
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>

3
현재 날짜가 2018/03/31 인 경우이 답변은 올바르지 않습니다. 또한 같은 상세
옥 남

4

이전 달이 현재보다 짧을 때이 문제를 발견했습니다.

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

3 월 30 일에 시도하면 2012-02 대신 2012-03-01을 받게됩니다.

더 나은 솔루션을 찾는 중 ...


3
이 답변은 정답입니다 (모든 경우에 1 개월이 제대로 작동하지 않음). 이전 달에는 strtotime ( 'last month')를 사용하십시오.
Mike

1
지난달 또는 -1 개월은 동일한 값을 반환합니다.
Etienne Dupuis

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

1
2015-10-31PHP 5.5 및 5.6.11에서는 작동하지 않습니다 . 201510와 같은 동작을 얻게 됩니다 strtotime('- 1 month).
pmayer 2015

2

이 짧은 코드를 사용하여 주어진 날짜에 대한 이전 달을 가져옵니다.

$tgl = '25 january 2012';

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

결과는 2011 년 12 월입니다. 이전 달보다 더 짧은 일이있는 한 달에 작동합니다.


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

4
코드 자체는 다소 자명 할 수 있지만 다른 사용자에게 코드를 제공하는 것보다 답변을 설명하는 것이 도움이됩니다.
Turnerj

1

을 사용할 수 있습니다 strtotime. 이는 이러한 상황에서 유용 합니다.

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

당신을 얻을 것입니다 :

string '2009-11' (length=7)

1
$time = mktime(0, 0, 0, date("m"),date("d")-date("t"), date("Y"));
$lastMonth = date("d-m-Y", $time);

또는

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

30.03.2012에 작동


1

오, 나는 이것을 알아 냈습니다. 내가 어떤 경우에했던 것과 같은 문제가 없다면 무시하십시오.

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

1

내가 찾은 최고의 솔루션은 다음과 같습니다.

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

}

0

나를 위해 작동합니다.

오늘 : 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

58.3 (3) %의 경우에만 작동합니다. 2 월, 4 월, 6 월, 9 월, 11 월은 어떻습니까? 31 일이 없습니다.
Taz

0

전월의 첫 번째 날짜를 얻으려면 다음과 같이 사용할 수 있습니다 ... $prevmonth = date('M Y 1', strtotime('-1 months'));what? 첫 번째 날짜는 항상 1 : D입니다.


2012 년 10 월 31 일. 반환 2012-10-01
Akira Yamamoto

0

이 질문은 꽤 오래되었지만 어쨌든 여기에 있습니다. 지난달 만 받으려고하는데 날짜가 중요하지 않은 경우 다음을 사용할 수 있습니다.

$date = '2014-01-03';

$dateTime = new DateTime($date);

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

echo $lastMonth; // 'December 2013'

0

지난달에 받기만하면됩니다.

예:

오늘 : 2020-09-02

암호:

echo date('Y-m-d', strtotime(date('Y-m-d')." -1 month"));

결과:

2020-08-02


StackOverflow에 오신 것을 환영합니다! 아마도 그날이 311 월이나 8 월이 아닌 경우 어떻게되는지 설명하는 것도 고려해야합니다 (예 : 2020 May 312020 April 31존재하지 않음)
xKobalt

PHP 내장 함수 "날짜", 처리합니다.
SL-phpdeveloper
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.