Sự khác biệt giữa các định dạng ngày / giờ khác nhau trong ActiveRecord không liên quan nhiều đến Rails và mọi thứ liên quan đến bất kỳ cơ sở dữ liệu nào bạn đang sử dụng.
Sử dụng MySQL như một ví dụ (nếu không có lý do khác vì nó là phổ biến nhất), bạn có DATE, DATETIME, TIMEvà TIMESTAMPcác kiểu dữ liệu cột; cũng giống như bạn có CHAR, VARCHAR, FLOATvà INTEGER.
Vì vậy, bạn hỏi, sự khác biệt là gì? Vâng, một số trong số họ là tự giải thích. DATEchỉ lưu trữ một ngày, TIMEchỉ lưu trữ một thời gian trong ngày, trong khi DATETIMElưu trữ cả hai.
Sự khác biệt giữa DATETIMEvà TIMESTAMPtinh tế hơn một chút: DATETIMEđược định dạng là YYYY-MM-DD HH:MM:SS. Phạm vi hợp lệ đi từ năm 1000 đến năm 9999 (và mọi thứ ở giữa. Mặc dù TIMESTAMP trông tương tự khi bạn lấy nó từ cơ sở dữ liệu, nhưng nó thực sự chỉ là một mặt trước cho dấu thời gian unix . Phạm vi hợp lệ của nó đi từ 1970 đến 2038. Sự khác biệt ở đây, ngoài những khác nhau được xây dựng trong các chức năng trong cơ sở dữ liệu, là không gian lưu trữ. Bởi vì DATETIMEcác cửa hàng mỗi chữ số trong năm, ngày tháng, giờ, phút và giây, nó sử dụng lên tổng cộng 8 byte. Như TIMESTAMPchỉ lưu trữ số trong vài giây kể từ 1970-01-01, nó sử dụng 4 byte.
Bạn có thể đọc thêm về sự khác biệt giữa các định dạng thời gian trong MySQL tại đây .
Cuối cùng, nó thuộc về những gì bạn cần cột ngày / thời gian để làm. Bạn có cần lưu trữ ngày và thời gian trước năm 1970 hoặc sau năm 2038 không? Sử dụng DATETIME. Bạn có cần phải lo lắng về kích thước cơ sở dữ liệu và bạn đang ở trong bộ đếm thời gian đó? Sử dụng TIMESTAMP. Bạn chỉ cần lưu trữ một ngày? Sử dụng DATE. Bạn chỉ cần lưu trữ một thời gian? Sử dụng TIME.
Đã nói tất cả những điều này, Rails thực sự đưa ra một số quyết định cho bạn . Cả hai :timestampvà :datetimesẽ mặc định DATETIME, trong khi :datevà :timetương ứng DATEvà TIME, tương ứng.
Điều này có nghĩa là trong Rails, bạn chỉ phải quyết định xem bạn cần lưu trữ ngày, giờ hay cả hai.