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

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

спасибо

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

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

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

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

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

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

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

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

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

Поскольку я googled это и пришел к этому ответу, я подумал, что я бы включил более современный ответ, который работает для PHP 5.3.0+.

 //Your starting date as DateTime $currentDate = new DateTime(date('Ym-d')); //Add 1 month $currentDate->add(new DateInterval('P1M')); //Get the first day of the next month as string $firstDayOfNextMonth = $currentDate->format('Ym-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 .

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

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

Как отметил еще один плакат, объект 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); - $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); 

Я взял подход матбаста, потому что он смог получить «первый день следующего месяца» с заданной датой, но есть небольшая проблема при расчете $ 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); 

Сначала я думал об использовании объекта 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'); } 

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

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

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

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

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

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

 $format = 'Ymd 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')); - $format = 'Ymd 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.

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