Різниця між різними форматами дати / часу в 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 вам потрібно лише вирішити, чи потрібно зберігати дату, час або те і інше.