Подтвердить что ты не робот

Как найти первый день следующего месяца и оставшиеся дни до этой даты с помощью PHP

Как я могу найти первый день следующего месяца и оставшиеся дни до этого дня с сегодняшнего дня?

Спасибо

4b9b3361

Ответ 1

Получить текущий месяц и год:

$curMonth = date('n');
$curYear  = date('Y');

Создайте отметку времени для 00:00 в первый день следующего месяца:

if ($curMonth == 12)
    $firstDayNextMonth = mktime(0, 0, 0, 0, 0, $curYear+1);
else
    $firstDayNextMonth = mktime(0, 0, 0, $curMonth+1, 1);

Число дней до этой даты - это количество секунд между теперь и далее, деленное на (24 * 60 * 60).

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

Изменить: Там вы идете, подстраиваетесь, чтобы учесть декабрь. Этот метод безопасен в режиме реального времени.

Ответ 2

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

Для получения первого дня после двух месяцев с текущего

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

Ответ 3

Самый простой и быстрый способ - использовать strtotime(), который распознает "первый день следующего месяца";

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

Ответ 4

Вы можете использовать объект 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;

Ответ 5

Так как я googled это и пришел к этому ответу, я решил, что я бы добавил более современный ответ, который работает для 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');

Ответ 6

Вы можете получить первый из следующих месяцев с этим:

$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.

Надеюсь, это поможет!

Ответ 7

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

Ответ 8

В качестве другого плаката упомянутый объект DateInterval не дает точных результатов в течение следующего месяца, когда вы используете даты, такие как 1/31/2016 или 8/31/2016, когда он пропускает следующий месяц. Мое решение состояло в том, чтобы по-прежнему использовать объект 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);

Ответ 9

Я принял подход 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);

Ответ 10

Сначала я думал об использовании объекта DateInterval (как обсуждалось выше в другом ответе), но он не надежный. Например, если текущий DateTime - 31 января, а затем мы добавим месяц (чтобы получить следующий месяц), то он полностью пропустит февраль!

Вот мое решение:

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

Ответ 11

Самый простой способ получить последний день месяца

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

Ответ 12

Еще более простой способ получить первый и последний день следующего месяца

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

Ответ 13

Вы могли бы сделать что-то вроде этого. Чтобы иметь эту функциональность, вам нужно использовать библиотеку php, доступную в https://packagist.org/packages/ishworkh/navigable-date.

С этим действительно легко сделать то, что вы просите здесь. Например, например:

$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"

Примечание. Кроме того, эта библиотека позволяет вам перемещаться между датами, днями, неделями, годами или вперед. Для получения дополнительной информации ознакомьтесь с ее README.

Ответ 14

Вы можете использовать метод date php, чтобы найти текущий месяц и дату, а затем вам нужно будет иметь короткий список, чтобы узнать, сколько дней в этом месяце и вычесть (високосный год потребует дополнительной работы).