Конец месяца это какие числа
Перейти к содержимому

Конец месяца это какие числа

  • автор:

Конец месяца это какие числа

Напишите функцию getLastDayOfMonth(year, month) , возвращающую последнее число месяца. Иногда это 30, 31 или даже февральские 28/29.

  • year – год из четырёх цифр, например, 2012.
  • month – месяц от 0 до 11.

К примеру, getLastDayOfMonth(2012, 1) = 29 (високосный год, февраль).

Создадим дату из следующего месяца, но в день передадим 0:

function getLastDayOfMonth(year, month) < let date = new Date(year, month + 1, 0); return date.getDate(); >alert( getLastDayOfMonth(2012, 0) ); // 31 alert( getLastDayOfMonth(2012, 1) ); // 29 alert( getLastDayOfMonth(2013, 1) ); // 28

Обычно даты начинаются с 1, но технически возможно передать любое число, и дата сама себя поправит. Так что если передать 0, то это значение будет соответствовать «один день перед первым числом месяца», другими словами: «последнее число прошлого месяца».

Конец месяца это какие числа

Собственно такой вопрос. На в скидку, что приходит в голову сравнивать дату с 12-тью концами месяцев. Может существует более элегантное решение?

Если следущая дата первое число, то это посл.день месяца
производственный календарь уже отменили?
Если КонецДня(МояДата) = КонецМесяца(МояДата) Тогда
этоконецмесяца = введеннаядата = конецмесяца(введеннаядата)
этоконецмесяца = конецдня(введеннаядата) = конецмесяца(введеннаядата);
Если Месяц(Дата + 1) > Месяц(Дата) Тогда
вы чо? КонецМесяца = КонецДня(дата) = КонецМесяца(Дата)
(2) это УТ. Там нет календаря.
Хватит позориться.
Правильный ответ в (3).
(0) Жесть. Такие вопросы и Стаж: 5 г. 1 мес. 🙂
(0) да, не забудь учесть високосные годы для февраля )) ЛОЛ
а мне (7) нравится — красивше, без всяких Если.

(10) Неформализовано понятие в сабже «конец месяца».
Если «конец месяца» — это «последний день месяца», то правильный (первый правильный) в (3).
Если конец месяца — это последняя секунда (т.е., в интерпретации системной функции КонецМесяца), то (4) — тоже правильный.
😛

(10) Так это пятничная ветка такая.

(12) тогда лучше так :

Функция ЭтоКонецМесяца (Дата)
Возврат КонецДня(дата) = КонецМесяца(Дата);
КонецФункции

Давайте конкурс откроем — кто интереснее и увлекательнее выполнить поставленную задачу. Использовать функции КонецМесяца и Месяц- нельзя!

(15) это не уменьшает твой косяк в (6) 😉

(16) Паразитируя на (1):
ЭтоКонецМесяца=День(КонецДня(Дата)+1)=1
Или более загадочно
ЭтоКонецМесяца=Не(День(КонецДня(Дата)-1)

ЭтоКонецМесяца=?(КонецДня(ТекущаяДата())+1 = НачалоМесяца(КонецДня(ТекущаяДата()+1)), Истина, Ложь);
(12) За (7) убивать надо.
(16) самое элегантное у ТС в (0) 12 сравнений с 12-ю концами месяцев.
(21) что там неверно ?
(19) Пропустил скобку ЭтоКонецМесяца=Не(День(КонецДня(Дата))-1)
(17) там я конец года только не учёл=)
(21) я жить хочу.
мКонецМесяца = КонецДня(дата) = КонецМесяца(Дата)
PR злой сегодня 🙂

(16) Имхо, победит метод ТС:
Если дата = ПервыйКонец тогда
.
ИначеЕсли дата = ВторойКонец тогда
.
и т.д., и т.п. :))))

(16) вот без месяцев

Если День(КонецДня(Дата)) > День(КонецДня(Дата) + 1)

(28) Нужно стремиться к совершенству! Должен быть вариант еще лучше!

(28) так сложно т.к. високосные и т.п., лучше
Если дата+1= ПерваяДатаПервогоМесяца тогда
.
ИначеЕсли дата+1 = ПерваяДатаВторогоМесяца тогда
.

(23) Для того, чтобы понять это выражение, нужно напрячь мозг.
Причем совершенно без нужды.
Читабельность и простота кода очень важны.

(31) Так читабельней:

Если дата = ПерваяДатаПервогоМесяца-1 тогда
.
ИначеЕсли дата = ПерваяДатаВторогоМесяца-1 тогда

(27) Да ладно, я всегда такой :))
Суровый, но справедливый :))

(32) фу ты, я уж думал что ругаешся на использование переменной с именем предопределённой функции. не надо там ничо напрягать

НашГод = Год(НашаДата);
ЭтоВисокосныйГод = (НашГод%4=0) и (НашГод%100<>0 или НашГод%400=0);
Массив = Новый Массив();
Массив.Добавить(31);
Массив.Добавить(28 + Число(ЭтоВисокосныйГод);
Массив.Добавить(31);
Массив.Добавить(30);
Массив.Добавить(31);
Массив.Добавить(30);
Массив.Добавить(31);
Массив.Добавить(31);
Массив.Добавить(30);
Массив.Добавить(31);
Массив.Добавить(30);
Массив.Добавить(31);
С=0;
Для й=1 по 12 Цикл
Массив[й]=Массив[й]+С;
С = Массив[й];
КонецЦикла;
ЭтоКонецМесяца = Массив.Найти(ДеньГода(НашаДата))<>Неопределено;

(35) На это мне плевать.
Если из-за этого не будет работать код, то тебя суровая реальность ударит больно об стол лицом.
А вот за нечитабельный код никто не ударит, а жаль :))

мКонецМесяца = Месяц(Дата) <> Месяц(Дата+86400);

(32) ИМХО, тот случай здесь, когда такая конструкция допустима. Разве переменную-результат назвать получше.

Если Найти(Строка(ВведеннаяДата),»31.01″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»28.02″)>0 ИЛИ (Найти(Строка(ВведеннаяДата),»29.02″)>0 И ГодВисокосный()) Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»31.03″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»30.04″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»31.05″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»30.06″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»31.07″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»31.08″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»30.09″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»31.10″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»30.11″)>0 Тогда
ЭтоКонецМесяца=Истина;
ИначеЕсли Найти(Строка(ВведеннаяДата),»31.12″)>0 Тогда
ЭтоКонецМесяца=Истина;
Иначе
ЭтоКонецМесяца=Ложь;
КонецЕсли;

Начало и конец месяца

При работе с датами периодически приходится определять первый и последний день месяца по дате. Этим мы сейчас и займемся.

Для усечения даты в PostgreSQL есть функция date_trunc(поле, значение) . Работает она аналогично функции trunc для чисел.

SELECT date_trunc('day', timestamp '2023-02-17 13:25') 
# date_trunc
1 2023-02-17 00:00:00

Первый параметр функции date_trunc может принимать значения:

  • microseconds
  • milliseconds
  • second
  • minute
  • hour
  • day
  • week
  • month
  • quarter
  • year
  • decade
  • century
  • millennium

Первый день месяца

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

SELECT date_trunc('month', timestamp '2023-02-17 13:25') 
# date_trunc
1 2023-02-01 00:00:00

При желании можно привести результат к дате:

SELECT date_trunc('month', timestamp '2023-02-17 13:25')::date 
# date_trunc
1 2023-02-01

Первый день месяца можно получить преобразовав исходную дату в строку с годом и месяцем, а затем сделать обратное преобразование в дату, добавив 1-е число.

SELECT (to_char(timestamp '2023-02-17 13:25', 'YYYY-MM') || '-01')::date 
# date
1 2023-02-01

Последний день месяца

С последним днем месяца дела обстоят немножко сложнее. В месяце может быть от 28 до 31 дней в зависимости от месяца и года. Просто так подставить число в строку не получится.

На помощь нам придет получение первого числа месяца и добавление интервала в один месяц.

SELECT date_trunc('month', timestamp '2023-02-17 13:25') + interval '1 month' AS result 
# result
1 2023-03-01 00:00:00

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

SELECT date_trunc('month', timestamp '2023-02-17 13:25') + interval '1 month -1 day' AS result 
# result
1 2023-02-28 00:00:00

Итоговый запрос для получения дат первого и последнего дней месяца:

SELECT date_trunc('month', timestamp '2023-02-17 13:25') AS start, date_trunc('month', timestamp '2023-02-17 13:25') + interval '1 month -1 day' AS end 
# start end
1 2023-02-01 00:00:00 2023-02-28 00:00:00

Добавление месяцев

Стоит отметить, как работает добавление месяцев к дате.

Если в исходной дате день месяца с 1 по 28, то в результате будет этот же день месяца.

SELECT timestamp '2023-02-17 13:25' + interval '1 month' 
# ?column?
1 2023-03-17 13:25:00

Для дней с 29 по 31 может получиться так, что после добавления нужного количества месяцев этого же числа не будет в месяце результата. В этом случае будет взят последний день месяца.

Например, к 31 января добавляем 1 месяц. 31 февраля не существует, поэтому результатом будет последний день февраля — 28 февраля (или 29 для високосного года).

SELECT date '2023-01-31' + interval '1 month' 
# ?column?
1 2023-02-28 00:00:00

Для високосного года:

SELECT date '2024-01-31' + interval '1 month' 
# ?column?
1 2024-02-29 00:00:00

Определение начала и конца года

Аналогично определению первого и последнего дня месяца можно найти первый и последний день года по дате.

SELECT date_trunc('year', timestamp '2023-02-17 13:25') AS start, date_trunc('year', timestamp '2023-02-17 13:25') + interval '1 year -1 day' AS end 
# start end
1 2023-01-01 00:00:00 2023-12-31 00:00:00

9.11 Динамическое построение интервала

9.13 EXTRACT — извлечение из даты части (год, месяц, день. )

Конец месяца-это с какого числа?

Конец месяца — это последняя неделя перед зарплатой. Она всегда самая тяжелая и долгая.

с числа 25-26

Если месяц поделить на декады, то начало с 1 по 10, середина с 11 по 20, конец с 21 по 30(31). как-то так.

теперь 1 число, было 25.

Похожие вопросы

Ваш браузер устарел

Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *