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
, TIME
và TIMESTAMP
các kiểu dữ liệu cột; cũng giống như bạn có CHAR
, VARCHAR
, FLOAT
và 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. DATE
chỉ lưu trữ một ngày, TIME
chỉ lưu trữ một thời gian trong ngày, trong khi DATETIME
lưu trữ cả hai.
Sự khác biệt giữa DATETIME
và TIMESTAMP
tinh 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ì DATETIME
cá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ư TIMESTAMP
chỉ 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 :timestamp
và :datetime
sẽ mặc định DATETIME
, trong khi :date
và :time
tương ứng DATE
và 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.