πŸ› οΈToolsShed

Kalkulator Siklus Tidur

Temukan waktu tidur atau bangun terbaik berdasarkan siklus tidur 90 menit.

Kalkulator Siklus Tidur membantu Anda merencanakan waktu tidur atau bangun untuk selaras dengan siklus tidur alami 90 menit tubuh Anda. Selama tidur, otak bersiklus melalui tahapan termasuk tidur ringan, tidur gelombang lambat yang dalam, dan tidur REM.

Masukkan waktu Anda ingin bangun atau waktu yang Anda rencanakan untuk tidur. Alat menghitung waktu tidur atau bangun yang jatuh di akhir siklus tidur yang lengkap, dengan mempertimbangkan rata-rata 15 menit yang dibutuhkan untuk tertidur.

Sebagian besar orang dewasa membutuhkan tidur 7-9 jam, setara dengan 5-6 siklus lengkap. Jika Anda secara teratur bangun dengan perasaan lelah meskipun tidur sesuai durasi yang direkomendasikan, masalahnya mungkin soal waktu β€” Anda terbangun di tengah fase tidur dalam.

Pertanyaan yang Sering Diajukan

Implementasi Kode

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.