Калькулятор циклов сна
Найдите лучшее время для сна или пробуждения на основе 90-минутных циклов сна.
Калькулятор циклов сна помогает планировать время отхода ко сну или пробуждения, согласовывая их с естественными 90-минутными циклами сна. Во время сна мозг проходит стадии лёгкого сна, глубокого медленного сна и REM-сна (со сновидениями). Один полный цикл занимает около 90 минут, а пробуждение в конце цикла обеспечивает отдохнувшее состояние.
Введите желаемое время пробуждения или время отхода ко сну. Инструмент рассчитает оптимальное время, приходящееся на конец полного цикла, с учётом среднего времени засыпания (15 минут). Показываются результаты для 4, 5, 6, 7 и 8 циклов (от 6 до 12 часов).
Большинству взрослых нужно 7-9 часов сна (5-6 полных циклов). Если вы регулярно просыпаетесь усталым при достаточной продолжительности сна, причина может быть в таймере — вы просыпаетесь в середине глубокой фазы. Сдвиг времени сна на 20-30 минут может заметно улучшить самочувствие.
Часто задаваемые вопросы
Реализация кода
from datetime import datetime, timedelta
CYCLE_MINUTES = 90 # average sleep cycle length
SLEEP_LATENCY_MINUTES = 15 # average time to fall asleep
def wake_times(bedtime_str, num_cycles=6, latency_minutes=SLEEP_LATENCY_MINUTES):
"""
Given a bedtime string ("HH:MM"), return suggested wake times
for 3 to num_cycles complete sleep cycles.
"""
bedtime = datetime.strptime(bedtime_str, "%H:%M")
results = []
for cycles in range(3, num_cycles + 1):
sleep_duration = timedelta(
minutes=latency_minutes + cycles * CYCLE_MINUTES
)
wake = bedtime + sleep_duration
results.append({
"cycles": cycles,
"sleep_hours": round((cycles * CYCLE_MINUTES) / 60, 1),
"wake_time": wake.strftime("%H:%M"),
})
return results
def bedtime_for_wake(wake_time_str, num_cycles=6, latency_minutes=SLEEP_LATENCY_MINUTES):
"""
Given a target wake time, suggest when to go to bed for
3 to num_cycles complete sleep cycles.
"""
wake = datetime.strptime(wake_time_str, "%H:%M")
results = []
for cycles in range(3, num_cycles + 1):
sleep_duration = timedelta(
minutes=latency_minutes + cycles * CYCLE_MINUTES
)
bedtime = wake - sleep_duration
results.append({
"cycles": cycles,
"sleep_hours": round((cycles * CYCLE_MINUTES) / 60, 1),
"bedtime": bedtime.strftime("%H:%M"),
})
return results
# Example 1: bedtime → wake times
print("If you go to bed at 23:00, wake up at:")
for w in wake_times("23:00"):
print(f" {w['cycles']} cycles ({w['sleep_hours']}h) → wake at {w['wake_time']}")
# Example 2: target wake time → bedtimes
print("\nTo wake up at 07:00, go to bed at:")
for b in bedtime_for_wake("07:00"):
print(f" {b['cycles']} cycles ({b['sleep_hours']}h) → bed at {b['bedtime']}")Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.