Różnica między różnymi formatami daty i godziny w ActiveRecord ma niewiele wspólnego z Railsami i wszystko, co dotyczy bazy danych, której używasz.
Korzystanie z MySQL jako przykład (jeśli nie z innego powodu, ponieważ jest to najbardziej popularny), trzeba DATE
, DATETIME
, TIME
i TIMESTAMP
typy danych kolumna; tak jak trzeba CHAR
, VARCHAR
, FLOAT
i INTEGER
.
Więc pytasz, jaka jest różnica? Cóż, niektóre z nich są oczywiste. DATE
przechowuje tylko datę, TIME
tylko pory dnia, a jednocześnie DATETIME
oba.
Różnica między DATETIME
i TIMESTAMP
jest nieco bardziej subtelna: DATETIME
jest sformatowana jako YYYY-MM-DD HH:MM:SS
. Prawidłowe zakresy zaczynają się od roku 1000 do roku 9999 (i wszystko pomiędzy. Podczas gdy TIMESTAMP
wygląda podobnie podczas pobierania go z bazy danych, to tak naprawdę jest tylko frontem dla uniksowego znacznika czasu . Jego prawidłowy zakres wynosi od 1970 do 2038 roku. Różnica tutaj, oprócz różnych wbudowanych funkcji w silniku bazy danych, jest miejsce do przechowywania. Ponieważ DATETIME
przechowuje każdą cyfrę w roku, miesiącu dzień, godzinę, minutę i sekundę, zużywa łącznie 8 bajtów. Jak TIMESTAMP
tylko przechowuje liczbę sekund od 1970-01-01, używa 4 bajtów.
Możesz przeczytać więcej o różnicach między formatami czasu w MySQL tutaj .
Ostatecznie wszystko sprowadza się do tego, czego potrzebujesz do wykonania kolumny z datą / godziną. Czy chcesz przechowywać daty i godziny przed 1970 r. Lub po 2038 r.? Zastosowanie DATETIME
. Czy musisz się martwić o rozmiar bazy danych i mieścisz się w tym przedziale czasowym? Zastosowanie TIMESTAMP
. Czy potrzebujesz tylko zapisać datę? Zastosowanie DATE
. Potrzebujesz tylko czasu? Zastosowanie TIME
.
Powiedziawszy to wszystko, Rails faktycznie podejmuje niektóre z tych decyzji za ciebie . Oba :timestamp
i :datetime
będą domyślnie ustawione na DATETIME
, while :date
i :time
odpowiednio na DATE
i TIME
.
Oznacza to, że w Railsach musisz jedynie zdecydować, czy chcesz przechowywać datę, godzinę, czy obie te rzeczy.