Untuk mengira hari kalendar antara tarikh penerbitan, bandingkan tarikh kalendar mereka dan bukannya membahagikan jam berlalu dengan 24. Pada Mac, Numbers mengendalikan input tarikh sahaja; cap masa perlu ditafsirkan terlebih dahulu dalam satu zon waktu yang dipilih.
Panduan ini menggunakan tarikh penerbitan sintetik dan kalendar Gregorian. Tugasnya ialah menjawab “Berapa hari kalendar jarak antara dua penerbitan ini?” Kiraan lalai ialah perbezaan bertanda: tarikh yang sama memberikan sifar, dan tarikh berikutnya memberikan satu.
Apakah jenis maklumat tarikh yang anda ada?
Pilih jenis input anda sebelum mengira. Tarikh yang dicetak pada penerbitan dan cap masa yang merekodkan detik keluaran memerlukan persediaan yang berbeza.
| Input | Maksud | Persediaan |
|---|---|---|
2025-03-09 |
Tarikh sivil: tahun, bulan dan hari | Bandingkan terus dengan tarikh sivil Gregorian yang lain |
2025-03-09T05:00:00Z |
Cap masa yang mengenal pasti suatu detik | Tukarkan kepada tarikh dalam zon pelaporan pilihan anda |
-05:00 |
Ofset UTC | Menghuraikan perbezaan waktu tempatan daripada UTC pada suatu detik |
America/New_York |
Zon waktu bernama | Membekalkan peraturan yang diperlukan untuk mentafsir tarikh tempatan dan perubahan ofset |
Ofset dan zon bernama membawa maklumat yang berbeza. Ofset yang dikaitkan dengan satu cap masa tidak menerangkan ofset pada tarikh yang lain. Zon bernama membekalkan peraturan untuk hubungan itu, termasuk perubahan waktu penjimatan siang. Perbezaan ini dinyatakan dengan jelas dalam RFC 9557, “Tarikh dan Masa di Internet: Cap Masa dengan Maklumat Tambahan”.
Untuk hamparan tarikh penerbitan, tetapkan peraturan ini: kekalkan tarikh yang sudah diberikan sebagai tarikh sivil; terbitkan tarikh daripada cap masa menggunakan satu zon pelaporan yang dipilih secara jelas. Jangan lampirkan tengah malam dan ofset sewenang-wenangnya pada nilai tarikh sahaja semata-mata untuk melakukan penolakan.
Piawaian kalendar juga membezakan tarikh daripada tarikh-masa. Piawaian iCalendar mentakrifkan nilai DATE yang berasingan, yang mengandungi komponen kalendar. Bentuk bersirinya menggunakan digit tanpa pemisah; tarikh bertanda sempang dalam panduan ini adalah untuk memudahkan pembacaan. Lihat RFC 5545, seksyen 3.3.4.
Mengapakah pembahagian saat berlalu dengan 86,400 tidak berkesan?
Perbezaan tarikh sivil mengukur kemajuan melalui kalendar. Perbezaan masa berlalu mengukur sela antara dua detik. Merentasi peralihan waktu penjimatan siang, kuantiti tersebut tidak semestinya sepadan dengan 24 jam bagi setiap pertambahan tarikh. RFC 5545 menyatakan dengan jelas bahawa pengulangan nominal satu hari boleh berlangsung lebih atau kurang daripada 24 jam apabila peralihan zon berlaku. Lihat perbincangan pengulangannya.
Pertimbangkan dua pasangan penerbitan sintetik dalam America/New_York. Pengiraan berikut menggunakan tengah malam waktu tempatan pada setiap titik hujung. Ofset mengikut peraturan zon dan peralihan New York dalam pangkalan data zon waktu IANA.
| Sela penerbitan sintetik | Ofset mula | Ofset akhir | Jam berlalu | Perbezaan tarikh sivil |
|---|---|---|---|---|
| 9–10 Mac 2025 | -05:00 |
-04:00 |
23 | 1 |
| 2–3 November 2025 | -04:00 |
-05:00 |
25 | 1 |
Bagi pasangan Mac, detik UTC yang sepadan ialah 2025-03-09T05:00:00Z dan 2025-03-10T04:00:00Z: jaraknya 23 jam. Membahagikan sela itu dengan 24 menghasilkan kira-kira 0.9583. Bagi pasangan November, pengiraan yang setara menghasilkan kira-kira 1.0417. Kedua-dua nombor perpuluhan itu tidak menjawab soalan kalendar.
Pembundaran mungkin menyembunyikan ralat dalam contoh ini, tetapi ia tidak menetapkan kaedah pengiraan yang boleh dipercayai. Dua penerbitan pada pukul 11:55 malam dan 12:05 pagi pada tarikh berturutan hanya berselang sepuluh minit, namun perbezaan tarikh sivilnya tetap satu. Ekstrak tarikh dahulu, kemudian kira perbezaannya.
Bagaimanakah anda mengira tarikh penerbitan dalam Numbers?
Gunakan kaedah ini apabila anda sudah mempunyai tarikh penerbitan yang dimaksudkan. Apple mendokumentasikan DAYS(end-date, start-date) sebagai fungsi yang memulangkan bilangan hari antara argumennya, termasuk hasil negatif apabila tarikh akhir mendahului tarikh mula. Lihat rujukan DAYS Numbers.
Buka hamparan Numbers dengan jadual kosong. Gunakan baris 1 untuk label penerangan, kemudian masukkan formula berikut satu demi satu pada baris 2. Untuk memasukkan formula, pilih selnya, taip = di hadapan, lengkapkan ungkapan itu dan tekan Return. Ini ialah langkah memasukkan formula dalam Numbers pada Mac yang didokumentasikan oleh Apple.
| Sel | Label lajur yang dicadangkan | Formula untuk dimasukkan | Nilai dijangka |
|---|---|---|---|
A2 |
Tarikh penerbitan lebih awal | =DATE(2025,3,9) |
9 Mac 2025 |
B2 |
Tarikh penerbitan kemudian | =DATE(2025,3,10) |
10 Mac 2025 |
C2 |
Jarak dalam hari kalendar | =DAYS(B2,A2) |
1 |
Menggunakan DATE membina input daripada tahun, bulan dan hari dan bukannya bergantung pada cara rentetan teks yang samar ditafsirkan. Apple mengesyorkan fungsi ini untuk tafsiran tarikh yang konsisten merentas tetapan format tarikh dalam senarai fungsi tarikh dan masa.
Ulangi semakan pada baris 3 dengan =DATE(2025,11,2) dalam A3, =DATE(2025,11,3) dalam B3, dan =DAYS(B3,A3) dalam C3. Jawapannya sekali lagi 1. Anda membandingkan tarikh kalendar yang diberikan, jadi tiada pelarasan jam berlalu perlu dibuat.
Untuk pengiraan pantas tanpa sel bantuan, masukkan =DAYS(DATE(2025,3,10),DATE(2025,3,9)) dalam satu sel kosong. Versi lajur berasingan lebih mudah diperiksa dan digunakan semula untuk berbilang pasangan penerbitan.
Adakah anda mahukan jarak antara tarikh atau kiraan tarikh secara inklusif?
Perbezaan biasa tidak mengira tarikh mula sebagai unit yang dikira. Jarak antara 9 Mac dengan 10 Mac ialah satu hari. Jika tugas anda sebaliknya bertanya berapa banyak label tarikh yang termasuk dari 9 Mac hingga 10 Mac, jawapannya dua.
Untuk julat inklusif yang tarikh akhirnya sama atau selepas tarikh mulanya, gunakan =DAYS(B2,A2)+1. Semak susunan tarikh sebelum menggunakan formula itu. Perbezaan negatif ialah petunjuk berguna bahawa entri telah diterbalikkan; mengambil nilai mutlak secara automatik akan membuang maklumat itu.
Perbezaan yang sama terpakai pada julat satu tarikh. Perbezaan tarikhnya sifar, manakala kiraan inklusif mengandungi satu tarikh. Tentukan hasil yang diperlukan oleh hamparan anda dan namakan lajur hasil sewajarnya.
Bagaimana jika input anda ialah cap masa?
Cap masa mesti ditukarkan kepada zon pelaporan sebelum masa dibuang. Contohnya, 2025-03-10T00:30:00Z bersamaan dengan 9 Mac pada pukul 8:30 malam dalam America/New_York, menggunakan ofset -04:00 pada tarikh itu. Menyalin sepuluh aksara pertama cap masa akan memilih tarikh UTC, bukannya tarikh penerbitan New York.
Tandatangan DAYS Numbers yang didokumentasikan menerima dua argumen tarikh; ia tidak mempunyai argumen zon bernama. Gunakannya selepas tarikh yang dimaksudkan ditentukan. Untuk pengiraan cap masa yang boleh diulang pada Mac, Foundation menyediakan API kalendar yang diperlukan.
Walaupun namanya Date, dalam Foundation ia mewakili suatu detik yang bebas daripada kalendar atau zon waktu. Apple mengarahkan pengiraan kalendar melalui Calendar. Lihat Date documentation rasmi.
Bagi peralihan waktu penjimatan siang biasa, urutan Foundation ialah: pilih kalendar Gregorian dan zon pelaporan, cari permulaan hari tempatan bagi setiap titik hujung, kemudian minta perbezaan menggunakan komponen hari sahaja. Apple mendokumentasikan kedua-dua startOfDay(for:) dan dateComponents(_:from:to:).
Jalankan contoh Foundation lengkap dalam Terminal
Kaedah pilihan ini memerlukan toolchain Swift yang telah dipasang. Buka Terminal dan jalankan swift --version untuk menyemaknya, seperti yang diterangkan dalam Panduan Bermula Swift. Jika perlu, Apple mendokumentasikan pemasangan alat baris perintah menggunakan xcode-select --install; lengkapkan dialog pemasangan sebelum meneruskan. Lihat Memasang alat baris perintah.
Tampal seluruh blok di bawah ke dalam Terminal. Blok itu mengandungi program lengkap dan data input sintetik. Ia menghurai cap masa dengan ofset yang dinyatakan secara jelas dan tanpa pecahan saat. Apple mendokumentasikan .withInternetDateTime untuk format cap masa ini dalam rujukan pilihan 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
Output yang dijangka adalah seperti berikut. Contoh berangka ini disemak secara berasingan menggunakan aritmetik tarikh; program Swift telah diperiksa tetapi tidak dijalankan pada macOS di sini.
Spring: 1 hari kalendar, 23.0 jam berlalu
Autumn: 1 hari kalendar, 25.0 jam berlalu
Untuk menyesuaikan program, gantikan rentetan cap masa dan pilih zon pelaporan dengan teliti. Ofset cap masa mengenal pasti detiknya; zon kalendar menentukan tarikh tempatan tempat detik itu berada. Program ini berhenti jika penghurainya melaporkan kegagalan, dan bukannya menggantikan tarikh semasa atau melangkau rekod.
Contoh ini menerima format yang dinyatakan dengan ofset. Pecahan saat memerlukan pilihan penghurai yang berbeza. Contoh ini juga tidak melaksanakan anotasi zon bertanda kurung siku RFC 9557: berikan zon bernama secara berasingan seperti yang ditunjukkan, dan jangan anggap anotasi tersebut disokong oleh konfigurasi penghurai ini.
Apakah yang perlu anda semak apabila hasilnya kelihatan salah?
Lakukan semakan ini mengikut turutan; setiap satunya menangani punca percanggahan yang berbeza.
- Sahkan kiraan yang diminta. Perbezaan tarikh dan kiraan tarikh inklusif berbeza sebanyak satu bagi julat ke hadapan.
- Sahkan input. Gunakan nilai tahun, bulan dan hari sebenar untuk tarikh penerbitan sahaja. Jangan anggap cap masa yang diimport sudah mewakili tarikh tempatan yang dimaksudkan.
- Sahkan zon pelaporan. Tukarkan kedua-dua detik menggunakan zon pilihan yang sama sebelum mengekstrak tarikh.
- Sahkan operasi. Kira hari kalendar selepas menghapuskan pengaruh waktu dalam sehari. Membahagikan sela detik dengan
86,400menjawab soalan tempoh masa berlalu. - Sahkan arah. Kekalkan hasil negatif sehingga anda menentukan sama ada entri lebih awal dan lebih kemudian telah diterbalikkan.
Untuk kod kalendar, gunakan API permulaan hari dan bukannya menganggap setiap hari tempatan bermula pada tengah malam yang unik. Apple mendokumentasikan bahawa startOfDay(for:) memilih tengah malam pertama apabila terdapat dua, atau detik pertama yang wujud apabila tengah malam tiada. Ini mengendalikan keadaan sempadan yang mungkin terlepas pandang jika jam ditetapkan secara manual kepada sifar. Lihat startOfDay(for:).
Contoh Foundation ini menangani perubahan waktu penjimatan siang biasa. Untuk perubahan sejarah yang melangkau seluruh tarikh tempatan, tentukan dahulu sama ada tugas itu mengira label tarikh Gregorian atau hari tempatan yang benar-benar wujud; kedua-duanya ialah keperluan yang berbeza. Kekalkan input tarikh sahaja sebagai label kalendar apabila yang pertama dimaksudkan.
Untuk hamparan tarikh penerbitan, pastikan pengiraan akhir ringkas: tentukan dua tarikh Gregorian yang dimaksudkan, kekalkan susunannya dan gunakan DAYS untuk mencari jaraknya. Apabila input ialah detik, nyatakan zon pelaporan dengan jelas sebelum mengira. Ini memastikan hasilnya berpaut pada tarikh penerbitan walaupun jam berubah antaranya.
Sumber
DAYS — Apple.
Kira nilai menggunakan data dalam sel jadual dalam Numbers pada Mac — Apple.
Senarai fungsi mengikut kategori — Apple.
RFC 9557: Tarikh dan Masa di Internet: Cap Masa dengan Maklumat Tambahan — IETF.
RFC 5545: Spesifikasi Teras Objek Kalendar dan Penjadualan Internet (iCalendar) — Editor RFC.
Date — Apple.
startOfDay(for:) — Apple.
dateComponents(_:from:to:) — Apple.
formatOptions — Apple.
Panduan Bermula — Swift.org.
Memasang alat baris perintah — Apple.