Получить конец недели исходя из переданной даты

Рейтинг: 0Ответов: 2Опубликовано: 14.04.2023

Есть ли какой-то простой способ получить конец недели исходя из произвольной даты? Например если передать в функцию 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_секунда

▲ 3

Весь код писать не буду, потому что не знаю, в каком виде приходят данные и в каком должны быть на выходе.

Есть функция date.isoweekday() (ссылка), возвращает порядковый номер дня недели указанной даты (дата - объект datetime). Можно этот номер отнять от 7, получить количество дней до воскресенья, полученное число прибавить любым удобным способом к значению day объекта datetime, получится дата воскресенья. А время всегда одинаковое 23:59:59.