Sangat umum ketika bekerja dengan rentang tanggal-waktu bahwa Anda menggunakan rentang yang inklusif di awal dan eksklusif di akhir. Misalnya:
(using ISO8601 formatting)
Start End
2013-04-29T01:00:00Z - 2013-04-29T02:00:00Z
2013-04-29T02:00:00Z - 2013-04-29T03:00:00Z
Suatu nilai berada dalam rentang jika kurang dari atau sama dengan awal, dan lebih besar dari (tetapi tidak sama dengan) akhir. Pada contoh di atas, 02:00
milik rentang kedua, bukan yang pertama. Dengan kata lain:
Start <= value < End
Atau setara,
Start <= value AND End > value
Dalam Matematika, menggunakan Notasi Interval , ini dikenal sebagai interval "setengah terbuka".
[Start, End)
Ini selalu merupakan pendekatan yang lebih baik daripada ide menggunakan nilai seperti 01:59:59
. Pertimbangkan jika saya akan mengurangi End - Start
untuk mendapatkan durasi. Saya berharap jawabannya adalah satu jam, bukan 59 menit dan 59 detik.
Sebagian besar contoh menggunakan istilah Start/End
, tetapi terkadang Anda akan melihat Begin/End
atau Start/Stop
. Secara pribadi, saya pikir kumpulan istilah terbaik untuk digunakan ketika Anda memiliki rentang inklusif/eksklusif adalah Start/Until
. Ini memiliki keuntungan tambahan dari kedua istilah menjadi 5 karakter, berbaris menurut abjad, dan secara eksplisit menyampaikan bahwa tanggal akhir eksklusif.
Juga, ketika Anda berbicara tentang peristiwa yang berbeda, Anda harus mencatat waktu Anda sebagai UTC untuk mencegah kebingungan seputar zona waktu. Ini bahkan penting untuk aplikasi lokal, karena banyak zona waktu yang melewati transisi musim panas. Anda tidak ingin nilai yang Anda rekam dalam database menjadi ambigu. Di MySQL, Anda dapat menggunakan TIMESTAMP
tipe data untuk memastikan nilai disimpan sebagai UTC, atau Anda dapat menggunakan DATETIME
tipe data jika Anda yakin bekerja dengan nilai UTC dalam kode aplikasi Anda.