Різниця між різними форматами дати / часу в ActiveRecord мало стосується Rails та всього, що стосується будь-якої бази даних, яку ви використовуєте.
Використання MySQL в якості прикладу (якщо немає інших причин , тому , що це найпопулярніший), у вас є DATE, DATETIME, TIMEі TIMESTAMPтипи даних стовпців; так само , як у вас є CHAR, VARCHAR, FLOATі INTEGER.
Отже, запитаєте, яка різниця? Ну, деякі з них пояснюють себе. DATEзберігає лише дату, TIMEзберігає лише час доби, тоді як DATETIMEзберігає обидва.
Різниця між DATETIMEі TIMESTAMPтрохи більш тонка: DATETIMEвідформатована як YYYY-MM-DD HH:MM:SS. Дійсні діапазони переходять від 1000 до 9999 року (і все між ними. Хоча це TIMESTAMP виглядає аналогічно, коли ви отримуєте його з бази даних, це дійсно просто фронт для часової мітки Unix . Дійсний діапазон йде від 1970 до 2038 р. Різниця тут, окрім різноманітних вбудованих функцій в двигуні бази даних, є місце для зберігання. Оскільки DATETIMEзберігає кожну цифру в році, місячному дні, годині, хвилині та секунді, він використовує в цілому 8 байт. Як TIMESTAMPтільки зберігає число секунд з 1970-01-01, він використовує 4 байти.
Детальніше про відмінності форматів часу в MySQL ви можете прочитати тут .
Врешті-решт, це зводиться до того, що вам потрібно зробити у стовпці дата / час. Чи потрібно зберігати дати та час до 1970 року або після 2038 року? Використовуйте DATETIME. Чи потрібно турбуватися про розмір бази даних, і ви знаходитесь в межах цього часового діапазону? Використовуйте TIMESTAMP. Вам потрібно лише зберігати побачення? Використовуйте DATE. Вам потрібно лише зберігати час? Використовуйте TIME.
Сказавши все це, Rails насправді приймає деякі з вас рішення . І те, :timestampі :datetimeза замовчуванням до DATETIME, в той час як :dateі :timeвідповідає DATEі TIME, відповідно, і.
Це означає, що в межах Rails вам потрібно лише вирішити, чи потрібно зберігати дату, час або те і інше.