Lewati ke konten
πŸ› οΈToolsShed

Generator Tanggal Berulang

Menghasilkan tanggal acara berulang: harian, mingguan, bulanan, atau interval kustom.

Tentang alat ini

Penjenerator Tanggal Berulang membantu Anda menghitung dan menampilkan tanggal untuk acara berulang tanpa perhitungan manual. Baik Anda merencanakan rapat tim mingguan, pembayaran tagihan bulanan, atau pengingat harian, alat ini secara instan menghasilkan semua tanggal yang Anda butuhkan berdasarkan tanggal mulai dan pola pengulangan Anda.

Untuk menggunakan alat ini, pilih tanggal mulai, pilih jenis pengulangan (harian, mingguan, bulanan, atau tahunan), dan atur berapa banyak kejadian yang ingin Anda hasilkan. Alat ini akan segera menampilkan daftar lengkap semua tanggal acara di masa depan, yang dapat Anda salin, ekspor, atau referensikan sesuai kebutuhan. Anda juga dapat menentukan interval khusus, misalnya setiap 3 minggu atau setiap 6 bulan.

Alat ini sangat berharga bagi manajer proyek, penorganisir acara, dan siapa pun yang menjadwalkan tugas berulang. Alat ini menghilangkan kesalahan dari perhitungan tanggal manual dan menghemat waktu saat mengoordinasikan pertemuan, langganan, atau jadwal pemeliharaan di berbagai tanggal.

Pertanyaan yang Sering Diajukan

Implementasi Kode

from datetime import date, timedelta
from dateutil.relativedelta import relativedelta  # pip install python-dateutil

def generate_recurring_dates(
    start: str,
    pattern: str,
    count: int,
    days_of_week: list[int] = None,  # 0=Mon..6=Sun, for weekly multi-day
) -> list[str]:
    """
    pattern: 'daily' | 'weekly' | 'biweekly' | 'monthly' | 'yearly'
    """
    start_date = date.fromisoformat(start)
    results = []

    if pattern == "weekly" and days_of_week:
        # Multi-day-of-week weekly
        d = start_date - timedelta(days=start_date.weekday())  # Go to Monday of week
        while len(results) < count:
            for dow in sorted(days_of_week):
                if len(results) >= count:
                    break
                candidate = d + timedelta(days=dow)
                if candidate >= start_date:
                    results.append(candidate.isoformat())
            d += timedelta(weeks=1)
        return results

    current = start_date
    for _ in range(count):
        results.append(current.isoformat())
        if pattern == "daily":
            current += timedelta(days=1)
        elif pattern == "weekly":
            current += timedelta(weeks=1)
        elif pattern == "biweekly":
            current += timedelta(weeks=2)
        elif pattern == "monthly":
            current += relativedelta(months=1)
        elif pattern == "yearly":
            current += relativedelta(years=1)
    return results

# Examples
print(generate_recurring_dates("2025-01-06", "weekly", 5))
print(generate_recurring_dates("2025-01-01", "monthly", 6))
print(generate_recurring_dates("2025-01-06", "weekly", 8, days_of_week=[0, 2]))  # Mon+Wed

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.