php последний день прошлого месяца
mktime
(PHP 4, PHP 5, PHP 7, PHP 8)
mktime — Возвращает метку времени Unix для заданной даты
Описание
Аргументы могут быть опущены в порядке справа налево. В этом случае их значения по умолчанию равны соответствующим компонентам локальной даты/времени.
Список параметров
Возвращаемые значения
Ошибки
Список изменений
Примеры
Пример #1 Пример использования функции mktime()
// Устанавливаем используемый по умолчанию часовой пояс.
date_default_timezone_set ( ‘UTC’ );
Пример #2 Пример использования mktime()
Функцию mktime() удобно использовать для выполнения арифметических операций с датами, так как она вычисляет верные значения при некорректных аргументах. Например, в следующем примере каждая строка выведет «Jan-01-1998».
Пример #3 Последний день месяца
Смотрите также
User Contributed Notes 27 notes
Do remember that, counter-intuitively enough, the arguments for month and day are inversed (or middle-endian). A common mistake for Europeans seems to be to feed the date arguments in the expected order (big endian or little endian).
Be careful passing zeros into mktime, in most cases a zero will count as the previous unit of time. The documentation explains this yet most of the comments here still use zeroes.
For example, if you pass the year 2013 into mktime, with zeroes for everything else, the outcome is probably not what you are looking for.
Please note, mktime requires an integer value, if you use date(«H»), date(«i»), date(«s») as a value, which is actually have a leading zero, you may get «A non well formed numeric value encountered» notice. so you need some tricks like this
mktime( date(«G»), intval(date(«i»)), intval(date(«s»), date(«n»), date(«j»), date(«Y») )
Since there are no minute & second without leading zero in the date function, we can use the intval() function or you can cast value type like this to force the value type.
I was using the following to get a list of month names.
Pay attention that not all days have the same number of seconds (86400s) if you are using date_default_timezone_set(..) and the used timezone has Daylight Saving Time (DST) e.g. «Europe/Berlin». Under PHP 5.5.16 I get the following results:
You may workaround this by using date_default_timezone_set(‘UTC’) where all days have the same number of seconds.
The following function moves all the parameters in order of most significant (biggest) to least significant (smallest) order.
Year is bigger than month. Month is bigger than day. Day bigger than hours.
Much less confusing than mktime order.
Add (and subtract) unixtime:
Function to generate array of dates between two dates (date range array)
echo » ;
?>
[EDIT BY danbrown AT php DOT net: Contains a bugfix submitted by (carlosbuz2 AT gmail DOT com) on 04-MAR-2011, with the following note: The first date in array is incorrect.]
The maximum possible date accepted by mktime() and gmmktime() is dependent on the current location time zone.
You cannot simply subtract or add month VARs using mktime to obtain previous or next months as suggested in previous user comments (at least not with a DD > 28 anyway).
If the date is 03-31-2007, the following yeilds March as a previous month. Not what you wanted.
If you are just looking to do month and year arithmetic using mktime, you can use general days like 1 or 28 to do stuff like this:
What’s odd is that mktime doesn’t seem to support every possible year number. It’s common sense that 2 digit (shortened) year numbers are interpreted in the range 1970..2069
However, when padded with zeroes, no such transformation should happen (at least that is the behaviour of other date functions). Unfortunately it does (until year 100 *inclusive*):
>*/
if(strlen($value[2])==4)/13/12/2012
//int mktime([hour[minute[second[month[day[year
return mktime(0, 0, 0,$value[1],$value[0],$value[2]);
>else < //2012/12/13
//int mktime([hour[minute[second[month[day[year
return mktime(0, 0, 0,$value[1],$value[2],$value[0]);
>
>
caculate days between two date
There are several warnings here about using mktime() to determine a date difference because of daylight savings time. However, nobody seems to have mentioned the other obvious problem, which is leap years.
Leap years mean that any effort to use mktime() and time() to determine the age (positive or negative) of some timestamp in years will be flawed. There are some years that are 366 days long, therefore you cannot say that there is a set number of seconds per year.
Timestamps are good for determining *real* time, which is not the same thing as *human calendar* time. The Gregorian calendar is only an approximation of real time, which is tweaked with daylight savings time and leap years to make it conform more to humans’ expectations of how time should or ought to work. Timestamps are not tweaked and therefore are the only authoritative way of recording in computers a proper order of succession of events, but they cannot be integrated with a Gregorian system unless you take both leap years and DST into account. Otherwise, you may get the wrong number of years when you are approaching a value of exactly X years.
As for PHP, you could still use timestamps as a way of determining age if you took into account not only DST but also whether or not each year is a leap year and adjusted your calculations accordingly. However, this could become messy and inefficient.
This solution works because it stays within the Gregorian system and doesn’t venture into the world of timestamps.
There is also the issue of leap seconds, but this will only arise if you literally need to get the *exact* age in seconds. In that case, of course, you would also need to verify that your timestamps are exactly correct and are not delayed by script processing time, plus you would need to determine whether your system conforms to UTC, etc. I expect this will hardly be an issue for anybody using PHP, however if you are interested there is an article on this issue on Wikipedia:
Получение даты в прошлом месяце в php
Я хочу получить дату в прошлом месяце. Я написал это:
Просто получить дату последнего месяца
3 ноября возвращается
Это точно выведет метку времени за последний месяц. После этого вам не нужно ничего менять. Если вы хотите, чтобы это было в английском формате после этого, вы можете использовать date () для форматирования метки времени, то есть:
если вы хотите получить только предыдущий месяц, то вы можете использовать как как следующее
если вы хотите получить последнюю дату предыдущего месяца, тогда вы можете использовать как следующий …
если вы хотите получить первую дату предыдущего месяца, тогда вы можете использовать как следующий …
Нашел это неправильно, если предыдущие месяцы короче текущего.
Попробуйте 30 марта, и вы получите 2012-03-01 вместо 2012-02 …
Разработка лучшего решения …
Неправильные ответы:
Правильный ответ будет:
echo date (‘Y’, strtotime («- 1 год»)); //в прошлом году
echo date (‘d’, strtotime («- 1 день»)); //последний день
echo date (‘m’, strtotime («- 1 месяц»)); //прошлый месяц
О, я понял это, пожалуйста, проигнорируйте, если у вас есть такая же проблема, я сделал в этом случае:
Используйте этот короткий код для получения предыдущего месяца для любой заданной даты:
Результат – декабрь 2011 года. Работает на месяц с более коротким днем с предыдущим месяцем.
Этот вопрос довольно старый, но здесь все равно. Если вы пытаетесь получить только предыдущий месяц, и день не имеет значения, вы можете использовать это:
Как получить первый и последний день предыдущего месяца с Carbon — Laravel
я нуждаюсь Первый а также Последний день из Прошлый месяц Используя Carbon Library, я попробовал следующее:
Кто-нибудь может мне помочь с этим?
Решение
Другие решения
Просто попробуйте это
$firstDayofPreviousMonth = Carbon::now()->startOfMonth()->subMonth()->toDateString();
$lastDayofPreviousMonth = Carbon::now()->subMonth()->endOfMonth()->toDateString();
С этим … дата начала init в 00:00 и дата окончания end в 23:59
Давайте разберем это утверждение в вашем примере:
Это оставляет нас с недействительной датой — нет 31 апреля. Дополнительный день просто добавляется к последней действительной дате (2016-04-30 + 1), которая переносит дату в май (2016-05-01).
Как уже упоминалось ранее, чтобы быть уверенным, что это никогда не произойдет, всегда сбрасывайте дату на 1-е число месяца, прежде чем делать что-либо еще (поскольку у каждого месяца есть 1-й день).
В настоящее время существует ошибка в Carbon при использовании метода
В результате ошибки возвращается последний день как 30 для тех месяцев, у которых есть 31 день.
То есть — если вы находитесь в марте и выполняете вышеуказанный звонок, он вернется 2017-03-30, а не 2017-03-31, как вы ожидаете.
Это закончилось правильной датой dateTimeString для тех дней, которые заканчиваются 31-го числа.
Вычислить дату последнего дня месяца перед целевой датой
Я могу добавить любое количество месяцев к дате:
Но я хочу сделать это, не переходя в следующий месяц.
в этом случае я хочу результат 2017-02-28, то есть последний день месяца до целевой месяц.
Решение
Кажется, в этих ответах много сложностей. Вам нужен последний день месяца перед целевым месяцем, который также всегда будет за 1 день до первого дня целевого месяца. Это можно выразить довольно просто:
Другие решения
Попробуйте использовать объект DateTime следующим образом:
Используйте PHP DateTime чтобы достичь этого, в частности, изменять () метод.
Если идея здесь состоит в том, чтобы не допустить переполнения даты в следующем месяце, как это делает PHP, то вам придется наложить это ограничение в своей логике.
Один из подходов заключается в сравнении измененного месяца с данным месяцем перед возвратом обновленной даты.
nextMonth() Функция в приведенном выше примере накладывает ограничение на отсутствие переполнения в следующем месяце. Обратите внимание, что на самом деле PHP пытается найти соответствующий день в последующем добавленном количестве месяцев, а не просто добавить заданное количество месяцев к существующей дате. Я просто отменяю эту последнюю часть, вычитая любые дополнительные дни после 1-месячного интервала в функции выше.
Другими словами, это не просто добавить +1 месяц до этой даты, но добавить +1 месяц к этой дате а также прибыть в тот же день месяца, что и в данную дату. Вот где происходит переполнение.
Обновить
Поскольку теперь вы ясно дали понять, что вам действительно нужен последний день месяца (не обязательно тот же день следующего месяца без условия переполнения), вместо этого вам следует просто явно указать день месяца.
Как найти последний день месяца с даты?
Как я могу получить последний день месяца в PHP?
Я хочу 2009-11-30; и учитывая
23 ответа
t возвращает количество дней в месяце данной даты (см. документы для date ):
Код с использованием strtotime() завершится неудачно после 2038 года (как указано в первом ответе в этом потоке) Например, попробуйте использовать следующее:
Он даст ответ как: 1970-01-31
Поэтому вместо strtotime следует использовать функцию DateTime. Следующий код будет работать без проблемы года 2038:
Я знаю, что это немного поздно, но я думаю, что есть более элегантный способ сделать это с помощью PHP 5.3+ с помощью DateTime class:
Существует также встроенная функция PHP cal_days_in_month()?
Это должно работать:
Ваше решение здесь..
Попробуйте, если вы используете PHP 5.3 +,
Для поиска последней даты последнего месяца измените следующим образом:
Если вы используете расширение API Carbon для PHP DateTime, вы можете получить последний день месяца:
Вы можете найти последний день месяца несколькими способами. Но просто вы можете сделать это, используя PHP strtotime() и date ( ). Я предполагаю, что ваш последний код будет выглядеть примерно так:
Но если вы используете PHP >= 5.2, я настоятельно рекомендую вам использовать новый объект DateTime. Например, как показано ниже:
Кроме того, вы можете решить эту проблему, используя свою собственную функцию, как показано ниже:
Вы также можете использовать его с datetime
Я опаздываю, но есть несколько простых способов сделать это, как упомянуто:
Как уже было сказано, strtotime не самый надежный способ пойти, и мало, если никто не будет столь же легко универсальным.