Perbedaan antara format tanggal / waktu yang berbeda dalam ActiveRecord tidak ada hubungannya dengan Rails dan semuanya terkait dengan database apa pun yang Anda gunakan.
Menggunakan MySQL sebagai contoh (jika tidak ada alasan lain karena itu yang paling populer), Anda memiliki DATE, DATETIME, TIMEdan TIMESTAMPjenis data kolom; seperti Anda memiliki CHAR, VARCHAR, FLOATdan INTEGER.
Jadi, Anda bertanya, apa bedanya? Yah, beberapa dari mereka cukup jelas. DATEhanya menyimpan tanggal, TIMEhanya menyimpan waktu, sementara DATETIMEmenyimpan keduanya.
Perbedaan antara DATETIMEdan TIMESTAMPsedikit lebih halus: DATETIMEdiformat sebagai YYYY-MM-DD HH:MM:SS. Rentang yang valid berkisar dari tahun 1000 hingga tahun 9999 (dan semuanya berada di antaranya. Meskipun TIMESTAMP terlihat serupa ketika Anda mengambilnya dari basis data, ini benar-benar hanya sebuah front untuk cap waktu unix . Rentang validnya berkisar antara 1970 hingga 2038. Perbedaannya di sini, selain dari berbagai fungsi built-in dalam mesin database, adalah ruang penyimpanan. Karena DATETIMEmenyimpan setiap digit dalam tahun, bulan, jam, menit, dan kedua, ia menghabiskan total 8 byte. Karena TIMESTAMPhanya menyimpan nomor detik sejak 1970-01-01, ia menggunakan 4 byte.
Anda dapat membaca lebih lanjut tentang perbedaan antara format waktu di MySQL di sini .
Pada akhirnya, itu tergantung pada apa yang Anda perlu kolom tanggal / waktu Anda lakukan. Apakah Anda perlu menyimpan tanggal dan waktu sebelum tahun 1970 atau setelah 2038? Gunakan DATETIME. Apakah Anda perlu khawatir tentang ukuran basis data dan Anda berada dalam rentang waktu itu? Gunakan TIMESTAMP. Apakah Anda hanya perlu menyimpan tanggal? Gunakan DATE. Apakah Anda hanya perlu menyimpan waktu? Gunakan TIME.
Setelah mengatakan semua ini, Rails sebenarnya membuat beberapa keputusan untuk Anda . Keduanya :timestampdan :datetimeakan default ke DATETIME, sementara :datedan :timesesuai dengan DATEdan TIME, masing-masing.
Ini berarti bahwa di dalam Rails, Anda hanya perlu memutuskan apakah Anda perlu menyimpan tanggal, waktu atau keduanya.