在PHP中获取上个月的日期

时间:2009-12-11 17:52:31

标签: php date

我想要上个月的约会。我写了这个:

$prevmonth = date('M Y');

这给了我当前的月/年。我不知道是否应该使用strtotimemktime。什么到时间戳?我是否需要在重置后添加一些内容,以便在我网站上的所有时间戳的所有内容中将日期设置为上个月?我正在尝试RTM,但我很难弄清楚这一点。

18 个答案:

答案 0 :(得分:188)

上个月的日期很简单

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

答案 1 :(得分:28)

echo strtotime("-1 month");

这将完全输出上个月的时间戳。之后你不需要重置任何东西。如果您之后想要英文格式,可以使用date()格式化时间戳,即:

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

答案 2 :(得分:19)

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

答案 3 :(得分:8)

答案不正确:

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

原因是当前月份为30天以上,但前一个月为29天,较少$ lastMonth将与当月相同。

e.g。

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

答案 4 :(得分:7)

如果您想在上个月获得,那么您可以像使用

一样使用
$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'));

答案 5 :(得分:4)

当前几个月短于当前月份时发现这个错误。

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

试试3月30日,您将获得2012-03-01而非2012-02 ...

制定更好的解决方案......

答案 6 :(得分: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>

答案 7 :(得分:2)

    NSData *pdfData = [NSData dataWithContentsOfURL:[NSURL URLWithString:pdfPath]]; // here pdfPath is webURL

    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * savePDFAt = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    savePDFAt = [NSString stringWithFormat:@"%@/PDFs/",savePDFAt];
    [[NSFileManager defaultManager] createDirectoryAtPath:savePDFAt withIntermediateDirectories:NO attributes:nil error:nil];
    [savePDFAt stringByAppendingPathComponent:"test.pdf"];

    if([pdfData writeToFile:savePDFAt options:0 error:&error])
        NSLog(@"PDF download complete");

    PDFPage *pdfPage = [PDFPage new];
    pdfPage.alpha = 0.0f;
    pdfPage.delegate = self;
    pdfPage.frame = [pdfPage setPdf:pdfPath];

答案 8 :(得分:2)

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

答案 9 :(得分:1)

哦,我想出来了,请忽略,除非你遇到同样的问题:

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

答案 10 :(得分: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(十月)。如果还需要年份,可以这样做:

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

}

答案 11 :(得分:1)

使用此短代码获取任何指定日期的上个月:

$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月。 与前一个月相比较短的一个月工作。

答案 12 :(得分:1)

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

OR

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

适用于2012年3月30日

答案 13 :(得分:1)

您可以使用strtotime,这在这种情况下很棒:

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

会得到你:

string '2009-11' (length=7)

答案 14 :(得分:0)

如果你想获得上个月的第一个日期,那么你可以像下面一样使用...... $prevmonth = date('M Y 1', strtotime('-1 months'));什么?第一个日期将始终为1:D

答案 15 :(得分:0)

这个问题已经很老了,但无论如何都要进行。如果你想要在上个月获得,那一天无关紧要,你可以使用它:

$date = '2014-01-03';

$dateTime = new DateTime($date);

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

echo $lastMonth; // 'December 2013'

答案 16 :(得分:0)

它对我有用:

今天是: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

答案 17 :(得分:0)

就在上个月。

示例:

今天是:2020-09-02

代码:

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

结果:

2020-08-02