Как я могу найти первый день следующего месяца и оставшиеся дни до этого дня с сегодняшнего дня?
Спасибо
Как я могу найти первый день следующего месяца и оставшиеся дни до этого дня с сегодняшнего дня?
Спасибо
Получить текущий месяц и год:
$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);
Изменить: Там вы идете, подстраиваетесь, чтобы учесть декабрь. Этот метод безопасен в режиме реального времени.
$firstDayNextMonth = date('Y-m-d', strtotime('first day of next month'));
Для получения первого дня после двух месяцев с текущего
$firstDayAfterTwoMonths = date('Y-m-d', strtotime('first day of +2 month'));
Самый простой и быстрый способ - использовать strtotime(), который распознает "первый день следующего месяца";
$firstDayNextMonth = date('Y-m-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('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');
Вы можете получить первый из следующих месяцев с этим:
$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('Y-m-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);
Я принял подход 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);
Сначала я думал об использовании объекта 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('Y-m-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 = '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.
Вы можете использовать метод date php, чтобы найти текущий месяц и дату, а затем вам нужно будет иметь короткий список, чтобы узнать, сколько дней в этом месяце и вычесть (високосный год потребует дополнительной работы).