Получить конец недели исходя из переданной даты
Есть ли какой-то простой способ получить конец недели исходя из произвольной даты? Например если передать в функцию 14.04.2023 то она вернет 16.04.2023 23:59:59. Я смотрел документацию модуля time и datetime, но не смог разобраться
Ответы (2 шт):
Хм, можно попытаться сделать так:
from datetime import datetime, timedelta
input_date = datetime(2023, 4, 14)
def next_week(date):
days_to_next_week = 7 - date.isoweekday()
result = (timedelta(days=days_to_next_week) + date).strftime('%d.%m.%Y %H:%M:%S')
return result
output_date = next_week(input_date)
print(output_date)
date.isoweekday() - возвращает текущий день недели в виде числа. 1 = Понедельник, 2 = Вторник ... 7 = Воскресенье.
timedelta(days=days_to_next_week) + date - сколько осталось дней + введённая дата.
strftime('%d.%m.%Y %H:%M:%S') - далее переводим в формат который вы хотели.
| Символ | Значение |
|---|---|
| %d | Текущий день в формате DD |
| %m | Текущий месяц в формате MM |
| %Y | Текущий год в формате YYYY |
| %H | Текущий час |
| %M | Текущая минута |
| %S | Текущая секунда |
А чтобы добиться конкретно конца дня, можно сделать так:
from datetime import datetime, timedelta
input_date = datetime(2023, 4, 14)
def next_week(date):
days_to_next_week = 7 - date.isoweekday()
result = (timedelta(days=days_to_next_week + 1) + date - timedelta(seconds=1)).strftime('%d.%m.%Y %H:%M:%S')
return result
output_date = next_week(input_date)
print(output_date)
timedelta(days=days_to_next_week + 1) + date - timedelta(seconds=1) - эквивалентно = недостоющее_кол-во_дней_до_конца_недели + 1_день + текущая_дата - 1_секунда
Весь код писать не буду, потому что не знаю, в каком виде приходят данные и в каком должны быть на выходе.
Есть функция date.isoweekday() (ссылка), возвращает порядковый номер дня недели указанной даты (дата - объект datetime). Можно этот номер отнять от 7, получить количество дней до воскресенья, полученное число прибавить любым удобным способом к значению day объекта datetime, получится дата воскресенья. А время всегда одинаковое 23:59:59.