La differenza tra diversi formati di data / ora in ActiveRecord ha poco a che fare con Rails e tutto a che fare con qualunque database tu stia utilizzando.
Utilizzando MySQL come esempio (se non altro perché è più popolare), si dispone DATE, DATETIME, TIMEe TIMESTAMPtipi di dati di colonna; proprio come avete CHAR, VARCHAR, FLOATe INTEGER.
Quindi, chiedi, qual è la differenza? Bene, alcuni di loro sono autoesplicativi. DATEmemorizza solo una data, TIMEmemorizza solo l'ora del giorno, mentre DATETIMEmemorizza entrambi.
La differenza tra DATETIMEe TIMESTAMPè un po 'più sottile: DATETIMEè formattata come YYYY-MM-DD HH:MM:SS. Gli intervalli validi vanno dall'anno 1000 all'anno 9999 (e tutto il resto. Mentre TIMESTAMP sembra simile quando lo recuperi dal database, è davvero solo un fronte per un timestamp unix . Il suo intervallo valido va dal 1970 al 2038. La differenza qui, a parte le varie funzioni integrate nel motore di database, c'è lo spazio di archiviazione. Poiché DATETIMEmemorizza ogni cifra dell'anno, mese giorno, ora, minuto e secondo, utilizza un totale di 8 byte. Poiché TIMESTAMPmemorizza solo il numero di secondi dal 1970-01-01, utilizza 4 byte.
Puoi leggere di più sulle differenze tra i formati di tempo in MySQL qui .
Alla fine, si riduce a ciò di cui hai bisogno per fare la colonna data / ora. Devi memorizzare date e orari prima del 1970 o dopo il 2038? Usa DATETIME. Devi preoccuparti delle dimensioni del database e ti trovi in quel intervallo di tempo? Usa TIMESTAMP. Devi solo memorizzare una data? Usa DATE. Devi solo conservare un orario? Usa TIME.
Detto questo, Rails in realtà prende alcune di queste decisioni per te . Entrambi :timestampe :datetimesaranno impostati su DATETIME, while :datee :timecorrisponde rispettivamente a DATEe TIME, rispettivamente.
Ciò significa che all'interno di Rails devi solo decidere se memorizzare la data, l'ora o entrambi.