如何使用PHP查找下个月的第一天以及到此日期的剩余天数

时间:2009-11-22 00:59:48

标签: php

我怎样才能找到下个月的第一天以及从现在起至今的剩余天数?

谢谢

16 个答案:

答案 0 :(得分:38)

$firstDayNextMonth = date('Y-m-d', strtotime('first day of next month'));

从目前的两个月后第一天获得

$firstDayAfterTwoMonths = date('Y-m-d', strtotime('first day of +2 month'));

答案 1 :(得分:34)

在下个月的第一天创建00:00的时间戳:

$firstDayNextMonth = strtotime('first day of next month');

该日期之前的天数是从现在开始到之后的秒数除以(24 * 60 * 60)。

$daysTilNextMonth = ($firstDayNextMonth - time()) / (24 * 3600);

答案 2 :(得分:6)

您可以像这样使用DateTime对象来查找下个月的第一天:

$date = new DateTime('first day of next month');

您可以这样做,以了解从现在到下个月第一天剩下的天数:

$date = new DateTime('now');
$nowTimestamp = $date->getTimestamp();
$date->modify('first day of next month');
$firstDayOfNextMonthTimestamp = $date->getTimestamp();
echo ($firstDayOfNextMonthTimestamp - $nowTimestamp) / 86400;

答案 3 :(得分:5)

最简单快捷的方法是使用strtotime()识别'下个月的第一天';

$firstDayNextMonth = date('Y-m-d', strtotime('first day next month'));

答案 4 :(得分:2)

由于我用Google搜索并得出了这个答案,我认为我将包含一个更适用于PHP 5.3.0 +的更现代的答案。

//Your starting date as DateTime
$currentDate = new DateTime(date('Y-m-d'));

//Add 1 month
$currentDate->add(new DateInterval('P1M'));

//Get the first day of the next month as string
$firstDayOfNextMonth = $currentDate->format('Y-m-1');

答案 5 :(得分:1)

你可以通过以下方式获得下个月的第一个:

$now = getdate();
$nextmonth = ($now['mon'] + 1) % 13 + 1;
$year = $now['year'];
if($nextmonth == 1)
    $year++;
$thefirst = gmmktime(0, 0, 0, $nextmonth, $year);

通过此示例,$thefirst将是下个月第一个的UNIX时间戳。使用date根据自己的喜好对其进行格式化。

这将为您提供当月剩余的日期:

$now = getdate();
$months = array(
    31,
    28 + ($now['year'] % 4 == 0 ? 1 : 0), // Support for leap years!
    31,
    30,
    31,
    30,
    31,
    31,
    30,
    31,
    30,
    31
);
$days = $months[$now['mon'] - 1];
$daysleft = $days - $now['mday'];

剩余天数将存储在$daysleft

希望这有帮助!

答案 6 :(得分:1)

$firstDayNextMonth = date('Y-m-d', mktime(0, 0, 0, date('m')+1, 1, date('Y')));

答案 7 :(得分:1)

正如另一张海报所提到的,当您使用日期(例如1/31/2016或8/31/2016)时,DateInterval对象在下个月没有给出准确的结果,因为它会跳过下个月。我的解决方案仍然是使用DateInterval对象,但在使用DateInterval之前,将当前日期重新格式化为当前月份的第一天。

$currentDate = '8/31/2016';
$date = new DateTime(date("n", strtotime($currentDate))."/1/".date("Y", strtotime($currentDate)));
//add 1 month
$date->add(new DateInterval('P1M'));
$currentDate=$date->format('m/1/Y'); 

echo($currentDate);

答案 8 :(得分:0)

我采用了mattbasta的方法,因为它可以在给定的日期获得“下个月的第一天”,但计算$ nextmonth时存在一个小问题。修复方法如下:

$now = getdate();
$nextmonth = ($now['mon'] + 1) % 13 + 1;
$year = $now['year'];
if($nextmonth == 1)
    $year++;
else
    $nextmonth--;
$thefirst = gmmktime(0, 0, 0, $nextmonth, $year);

答案 9 :(得分:0)

我最初考虑使用DateInterval对象(如上面在另一个答案中讨论的那样),但它不可靠。例如,如果当前的DateTime是1月31日然后我们添加一个月(以获得下个月),那么它将完全跳过2月!

这是我的解决方案:

function start_of_next_month(DateTime $datetime)
{
    $year = (int) $datetime->format('Y');
    $month = (int) $datetime->format('n');
    $month += 1;

    if ($month === 13)
    {
        $month = 1;
        $year += 1;
    }

    return new DateTime($year . '-' . $month . '-01');
}

答案 10 :(得分:0)

获得本月最后一天的最简单方法

date('Y-m-d', mktime(0, 0, 0, date('m')+1, 1, date('Y')));

答案 11 :(得分:0)

更容易获得下个月的第一天和最后一天

$first = strttotime("first day of next month");
$last = strttotime("last day of next month");

答案 12 :(得分:0)

你可以这样做。要拥有此功能,您需要使用https://packagist.org/packages/ishworkh/navigable-date中提供的php库。

这很容易做到你在这里要求的东西。 例如:

$format = 'Y-m-d H:i:s';

$Date = \NavigableDate\NavigableDateFacade::create('2017-02-24');
var_dump($Date->format($format));

$resetTime = true;
$resetDays = true;

$NextMonth = $Date->nextMonth($resetTime, $resetDays);

var_dump($NextMonth->format($format));

$DayUntilFirstOfNextMonth = $NextMonth->getDifference($Date);

var_dump('Days left:' . $DayUntilFirstOfNextMonth->format('%d'));

给你输出:

string(19) "2017-02-24 00:00:00"
string(19) "2017-03-01 00:00:00"
string(11) "Days left:5"

注意:此外,此库允许您按日期(星期),星期(s),年(s)向前或向后浏览日期。有关更多信息,请查看其自述文件。

答案 13 :(得分:0)

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

实现此目的的最简单方法。您可以回显或存储到变量中。

答案 14 :(得分:0)

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

为了获得下个月的第一天一个干净的解决方案:

<?php
$date = new DateTimeInmutable('now');
$date->modify('first day of next month');//here the magic occurs

echo $date->format('Y-m-d') . '\n';

由于您只想计算它,我建议使用 DateTimeInmutable 类。 使用类 DateTime$date->modify('first day of next month'); 将修改您的原始日期值。

答案 15 :(得分:-3)

您可以使用php日期方法查找当前月份和日期,然后您需要有一个简短的列表来查找该月份的天数并减去(闰年需要额外的工作)。