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, TIMEi TIMESTAMPtypy danych kolumna; tak jak trzeba CHAR, VARCHAR, FLOATi INTEGER.
Więc pytasz, jaka jest różnica? Cóż, niektóre z nich są oczywiste. DATEprzechowuje tylko datę, TIMEtylko pory dnia, a jednocześnie DATETIMEoba.
Różnica między DATETIMEi TIMESTAMPjest nieco bardziej subtelna: DATETIMEjest 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ż DATETIMEprzechowuje każdą cyfrę w roku, miesiącu dzień, godzinę, minutę i sekundę, zużywa łącznie 8 bajtów. Jak TIMESTAMPtylko 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 :timestampi :datetimebędą domyślnie ustawione na DATETIME, while :datei :timeodpowiednio na DATEi TIME.
Oznacza to, że w Railsach musisz jedynie zdecydować, czy chcesz przechowywać datę, godzinę, czy obie te rzeczy.