Untuk menghitung hari kalender antara tanggal publikasi, bandingkan tanggal kalendernya, bukan membagi jam yang berlalu dengan 24. Di Mac, Numbers menangani masukan yang hanya berisi tanggal; stempel waktu perlu ditafsirkan terlebih dahulu dalam satu zona waktu yang dipilih.

Panduan ini menggunakan tanggal publikasi sintetis dan kalender Gregorian. Tugasnya adalah menjawab “Berapa hari kalender jarak antara kedua publikasi ini?” Hitungan bawaan adalah selisih bertanda: tanggal yang sama menghasilkan nol, dan tanggal berikutnya menghasilkan satu.

Jenis informasi tanggal apa yang Anda miliki?

Pilih jenis masukan sebelum menghitung. Tanggal yang tercetak pada publikasi dan stempel waktu yang mencatat saat publikasi dirilis memerlukan persiapan yang berbeda.

Masukan Makna Persiapan
2025-03-09 Tanggal sipil: tahun, bulan, dan hari Bandingkan langsung dengan tanggal sipil Gregorian lainnya
2025-03-09T05:00:00Z Stempel waktu yang mengidentifikasi suatu saat Ubah menjadi tanggal dalam zona pelaporan pilihan Anda
-05:00 Offset UTC Menjelaskan perbedaan waktu lokal dari UTC pada suatu saat
America/New_York Zona waktu bernama Menyediakan aturan yang diperlukan untuk menafsirkan tanggal lokal dan perubahan offset

Offset dan zona bernama memuat informasi yang berbeda. Offset yang melekat pada satu stempel waktu tidak menjelaskan offset pada tanggal lain. Zona bernama menyediakan aturan untuk hubungan tersebut, termasuk perubahan waktu musim panas. Perbedaan ini dijelaskan secara eksplisit dalam RFC 9557, “Tanggal dan Waktu di Internet: Stempel Waktu dengan Informasi Tambahan”.

Untuk spreadsheet tanggal publikasi, tetapkan aturan berikut: pertahankan tanggal yang sudah diberikan sebagai tanggal sipil; turunkan tanggal dari stempel waktu menggunakan satu zona pelaporan yang dipilih secara eksplisit. Jangan menambahkan tengah malam dan offset sembarang pada nilai yang hanya berisi tanggal sekadar untuk melakukan pengurangan.

Standar kalender juga membedakan tanggal dari tanggal-waktu. Standar iCalendar mendefinisikan nilai DATE terpisah yang memuat komponen kalender. Bentuk serialisasinya menggunakan angka tanpa pemisah; tanda hubung pada tanggal dalam panduan ini digunakan agar mudah dibaca. Lihat RFC 5545, bagian 3.3.4.

Mengapa membagi detik yang berlalu dengan 86.400 tidak berhasil?

Selisih tanggal sipil mengukur pergerakan dalam kalender. Selisih waktu yang berlalu mengukur interval antara dua saat. Saat terjadi peralihan waktu musim panas, kedua besaran tersebut belum tentu setara dengan 24 jam untuk setiap kenaikan satu tanggal. RFC 5545 secara eksplisit menyebutkan bahwa pengulangan satu hari nominal dapat berlangsung kurang atau lebih dari 24 jam ketika terjadi pergeseran zona. Lihat pembahasan pengulangannya.

Perhatikan dua pasang tanggal publikasi sintetis di America/New_York. Perhitungan berikut menggunakan tengah malam waktu lokal di setiap titik akhir. Offset mengikuti aturan zona dan peralihan New York dalam basis data zona waktu IANA.

Interval publikasi sintetis Offset awal Offset akhir Jam yang berlalu Selisih tanggal sipil
9–10 Maret 2025 -05:00 -04:00 23 1
2–3 November 2025 -04:00 -05:00 25 1

Untuk pasangan bulan Maret, saat UTC yang bersesuaian adalah 2025-03-09T05:00:00Z dan 2025-03-10T04:00:00Z: selisihnya 23 jam. Membagi interval itu dengan 24 menghasilkan sekitar 0.9583. Untuk pasangan bulan November, perhitungan yang setara menghasilkan sekitar 1.0417. Tidak satu pun bilangan desimal itu menjawab pertanyaan kalender.

Pembulatan dapat menyamarkan kesalahan dalam contoh-contoh ini, tetapi tidak menghasilkan aturan penghitungan yang andal. Dua publikasi pada pukul 23.55 dan 00.05 di tanggal berurutan hanya berjarak sepuluh menit, tetapi selisih tanggal sipilnya tetap satu. Ekstrak tanggalnya terlebih dahulu, lalu hitung selisihnya.

Bagaimana cara menghitung tanggal publikasi di Numbers?

Gunakan cara ini jika Anda sudah memiliki tanggal publikasi yang dimaksud. Apple mendokumentasikan DAYS(end-date, start-date) sebagai fungsi yang mengembalikan jumlah hari di antara argumennya, termasuk hasil negatif jika tanggal akhir lebih awal daripada tanggal awal. Lihat referensi DAYS Numbers.

Buka spreadsheet Numbers dengan tabel kosong. Gunakan baris 1 untuk label deskriptif, lalu masukkan rumus berikut satu per satu di baris 2. Untuk memasukkan rumus, pilih selnya, ketik = di awal, lengkapi ekspresinya, lalu tekan Return. Langkah-langkah ini didokumentasikan Apple dalam petunjuk memasukkan rumus di Numbers untuk Mac.

Sel Label kolom yang disarankan Rumus yang dimasukkan Nilai yang diharapkan
A2 Tanggal publikasi lebih awal =DATE(2025,3,9) 9 Maret 2025
B2 Tanggal publikasi lebih akhir =DATE(2025,3,10) 10 Maret 2025
C2 Selisih hari kalender =DAYS(B2,A2) 1

Menggunakan DATE menyusun masukan dari tahun, bulan, dan hari, alih-alih mengandalkan cara penafsiran string teks yang ambigu. Apple merekomendasikan fungsi ini agar penafsiran tanggal konsisten di berbagai pengaturan format tanggal dalam daftar fungsi tanggal dan waktu.

Ulangi pemeriksaan di baris 3 dengan =DATE(2025,11,2) di A3, =DATE(2025,11,3) di B3, dan =DAYS(B3,A3) di C3. Hasilnya sekali lagi adalah 1. Anda membandingkan tanggal kalender yang diberikan, jadi tidak perlu menyesuaikan jam yang berlalu.

Untuk perhitungan cepat tanpa sel bantu, masukkan =DAYS(DATE(2025,3,10),DATE(2025,3,9)) di satu sel kosong. Versi dengan kolom terpisah lebih mudah diperiksa dan digunakan kembali untuk beberapa pasang tanggal publikasi.

Apakah Anda ingin menghitung selisih atau rentang tanggal inklusif?

Selisih standar tidak menghitung tanggal awal sebagai satuan yang dihitung. Jarak dari 9 Maret ke 10 Maret adalah satu hari. Jika tugas Anda justru menanyakan berapa label tanggal yang tercakup dari 9 Maret hingga 10 Maret, jawabannya dua.

Untuk rentang inklusif yang tanggal akhirnya sama dengan atau lebih akhir daripada tanggal awal, gunakan =DAYS(B2,A2)+1. Periksa urutannya sebelum menerapkan rumus tersebut. Selisih negatif merupakan petunjuk berguna bahwa entri-entri tertukar; mengambil nilai absolut secara otomatis akan membuang informasi itu.

Perbedaan yang sama berlaku untuk rentang satu tanggal. Selisih tanggalnya nol, sedangkan hitungan inklusif mencakup satu tanggal. Tentukan hasil yang diperlukan spreadsheet Anda dan beri nama kolom hasil dengan sesuai.

Bagaimana jika masukan Anda berupa stempel waktu?

Stempel waktu harus diubah ke zona pelaporan sebelum bagian waktunya dihilangkan. Misalnya, 2025-03-10T00:30:00Z setara dengan 9 Maret pukul 20.30 di America/New_York, menggunakan offset -04:00 pada tanggal tersebut. Menyalin sepuluh karakter pertama stempel waktu akan memilih tanggal UTC, bukan tanggal publikasi New York.

Tanda tangan DAYS Numbers yang didokumentasikan menerima dua argumen tanggal; tidak ada argumen zona bernama. Gunakan fungsi itu setelah tanggal yang dimaksud ditetapkan. Untuk perhitungan stempel waktu yang dapat diulang di Mac, Foundation menyediakan API kalender yang diperlukan.

Terlepas dari namanya, Date di Foundation merepresentasikan suatu saat yang tidak bergantung pada kalender atau zona waktu. Apple mengarahkan perhitungan kalender melalui Calendar. Lihat dokumentasi resmi Date.

Untuk peralihan waktu musim panas biasa, urutan di Foundation adalah: pilih kalender Gregorian dan zona pelaporan, cari awal hari lokal untuk setiap titik akhir, lalu minta selisih hanya dengan komponen hari. Apple mendokumentasikan startOfDay(for:) dan dateComponents(_:from:to:).

Jalankan contoh Foundation lengkap di Terminal

Cara opsional ini memerlukan toolchain Swift yang sudah terpasang. Buka Terminal dan jalankan swift --version untuk memeriksanya, seperti dijelaskan dalam Panduan Memulai Swift. Jika perlu, Apple mendokumentasikan pemasangan alat baris perintah menggunakan xcode-select --install; selesaikan dialog pemasangan sebelum melanjutkan. Lihat Memasang alat baris perintah.

Tempelkan seluruh blok di bawah ini ke Terminal. Blok tersebut berisi program lengkap dan data masukan sintetis. Program ini mengurai stempel waktu dengan offset eksplisit dan tanpa pecahan detik. Apple mendokumentasikan .withInternetDateTime untuk format stempel waktu ini dalam referensi opsi ISO8601DateFormatter.

swift - <<'SWIFT'
import Foundation

let zoneID = "America/New_York"
guard let zone = TimeZone(identifier: zoneID) else {
    fatalError("Unknown reporting zone: \(zoneID)")
}

var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = zone

let parser = ISO8601DateFormatter()
parser.formatOptions = [.withInternetDateTime]

let samples = [
    ("Spring", "2025-03-09T00:00:00-05:00",
               "2025-03-10T00:00:00-04:00"),
    ("Autumn", "2025-11-02T00:00:00-04:00",
               "2025-11-03T00:00:00-05:00")
]

for (label, startText, endText) in samples {
    guard let start = parser.date(from: startText),
          let end = parser.date(from: endText) else {
        fatalError("Could not parse timestamps for \(label)")
    }

    let startDay = calendar.startOfDay(for: start)
    let endDay = calendar.startOfDay(for: end)
    guard let days = calendar.dateComponents(
        [.day], from: startDay, to: endDay
    ).day else {
        fatalError("Could not calculate civil days for \(label)")
    }

    let hours = end.timeIntervalSince(start) / 3600
    print("\(label): \(days) civil day(s), \(hours) elapsed hours")
}
SWIFT

Berikut keluaran yang diharapkan. Contoh numeriknya telah diperiksa secara terpisah dengan aritmetika tanggal; program Swift telah ditinjau, tetapi tidak dijalankan di macOS di sini.

Musim semi: 1 hari kalender, 23,0 jam yang berlalu
Musim gugur: 1 hari kalender, 25,0 jam yang berlalu

Untuk menyesuaikan program, ganti string stempel waktunya dan pilih zona pelaporan dengan sengaja. Offset stempel waktu mengidentifikasi saatnya; zona kalender menentukan tanggal lokal yang ditempati saat-saat tersebut. Program berhenti jika pengurainya melaporkan kegagalan, alih-alih menggunakan tanggal saat ini atau melewatkan catatan.

Contoh ini menerima format ber-offset yang telah disebutkan. Pecahan detik memerlukan opsi pengurai yang berbeda. Contoh ini juga tidak menerapkan anotasi zona berkurung siku RFC 9557: berikan zona bernama secara terpisah, seperti ditunjukkan, alih-alih menganggap anotasi tersebut didukung oleh konfigurasi pengurai ini.

Apa yang perlu diperiksa jika hasilnya tampak salah?

Lakukan pemeriksaan berikut secara berurutan; masing-masing menangani sumber ketidaksesuaian yang berbeda.

  1. Pastikan hitungan yang diminta. Selisih tanggal dan hitungan tanggal inklusif berbeda satu untuk rentang maju.
  2. Pastikan masukannya. Gunakan nilai tahun, bulan, dan hari yang sebenarnya untuk tanggal publikasi yang hanya berisi tanggal. Jangan menganggap stempel waktu yang diimpor sudah mewakili tanggal lokal yang dimaksud.
  3. Pastikan zona pelaporan. Ubah kedua saat menggunakan zona pilihan yang sama sebelum mengekstrak tanggal.
  4. Pastikan operasinya. Hitung hari kalender setelah menghilangkan pengaruh waktu dalam sehari. Membagi interval suatu saat dengan 86,400 menjawab pertanyaan tentang durasi yang berlalu.
  5. Pastikan arahnya. Pertahankan hasil negatif sampai Anda memastikan apakah entri yang lebih awal dan lebih akhir tertukar.

Untuk kode kalender, gunakan API awal hari alih-alih menganggap setiap hari lokal selalu dimulai pada tengah malam yang unik. Apple mendokumentasikan bahwa startOfDay(for:) memilih tengah malam pertama jika ada dua, atau saat pertama yang ada jika tengah malam tidak ada. Ini menangani kondisi batas yang mungkin terlewat jika jam diatur secara manual ke nol. Lihat startOfDay(for:).

Contoh Foundation ini menangani perubahan waktu musim panas biasa. Untuk perubahan historis yang melewatkan satu tanggal lokal penuh, tentukan terlebih dahulu apakah tugasnya menghitung label tanggal Gregorian atau hari lokal yang benar-benar ada; keduanya merupakan persyaratan berbeda. Pertahankan masukan yang hanya berisi tanggal sebagai label kalender jika yang dimaksud adalah persyaratan pertama.

Untuk spreadsheet tanggal publikasi, buat perhitungan akhirnya tetap sederhana: tetapkan dua tanggal Gregorian yang dimaksud, pertahankan urutannya, dan gunakan DAYS untuk mencari selisihnya. Jika masukannya berupa saat, tentukan zona pelaporan secara eksplisit sebelum menghitung. Dengan begitu, hasilnya tetap sesuai dengan tanggal publikasi meskipun jam berubah di antara kedua tanggal tersebut.

Sumber