cuando los usuarios se registran en uno de mis sitios para una versión de prueba gratuita, configuro el vencimiento de su cuenta como "14.days.from_now". A continuación, en la página principal muestro el número de días que han restantes, que me sale con:Rails times oddness: "x días a partir de ahora"
(user.trial_expires - Time.now)/86400
(porque hay 86.400 segundos en un día, es decir, 60 * 60 * 24)
Lo curioso es decir, esto sale como más de 14, por lo que se redondea a 15. En una investigación más a fondo en la consola, esto sucede por solo dos días en el futuro (si sabes a qué me refiero). por ejemplo
>> Time.now
=> Fri Oct 29 11:09:26 0100 2010
>> future_1_day = 1.day.from_now
=> Sat, 30 Oct 2010 11:09:27 BST 01:00
#ten past eleven tomorrow
>> (future_1_day - Time.now)/86400
=> 0.999782301526931
#less than 1, what you'd expect right?
>> future_2_day = 2.day.from_now
=> Sun, 31 Oct 2010 11:09:52 GMT 00:00
>> (future_2_day - Time.now)/86400
=> 2.04162248861183
#greater than 2 - why?
pensé que tal vez era que ver con las zonas horarias - me di cuenta de que el tiempo de 1.day a partir de ahora se encontraba en BST y el tiempo de 2 días a partir de ahora se encontraba en GMT. ¡Intenté usar localtime y obtuve los mismos resultados!
>> future_2_day = 2.day.from_now.localtime
=> Sun Oct 31 11:11:24 0000 2010
>> (future_2_day - Time.now)/86400
=> 2.04160829127315
>> (future_2_day - Time.now.localtime)/86400
=> 2.04058651585648
entonces me preguntaba qué tan grande es la diferencia, y resulta que es exactamente una hora a cabo. Así que parece una rareza de zona horaria, o al menos algo relacionado con las zonas horarias que no entiendo. Actualmente, mi zona horaria es BST (horario de verano británico), que es una hora más tarde que UTC en este momento (hasta este domingo en cuyo punto vuelve a ser lo mismo que UTC).
Parece que se ha introducido la hora extra cuando agrego dos días a Time.now: mira esto. Empiezo con Time.now, le agrego dos días, resta Time.now, luego restar dos días de segundos del resultado y me queda una hora.
Se me acaba de ocurrir, en una cabeza golpeando momento, que esto está ocurriendo porque el reloj se remontan en el domingo por la mañana: es decir, a las 11.20 de la mañana del domingo que se dos días y una hora más a partir de ahora. Estaba a punto de eliminar toda esta publicación, pero luego me di cuenta de esto: pensé 'ah, puedo arreglar esto usando (24 * daynum) .horas en lugar de daynum.days, pero aún obtengo el mismo resultado: incluso cuando ¡uso segundos!
>> (Time.now + (2*24).hours - Time.now) - 86400*2
=> 3599.99969500001
>> (Time.now + (2*24*3600).seconds - Time.now) - 86400*2
=> 3599.999855
Así que ahora estoy confundido de nuevo. ¿Cómo puede ahora más dos días en segundos, menos ahora, menos dos días en segundos, una hora en segundos? ¿Dónde entra la hora extra?
Una hora extra podría ser la luz del día ahorrando tal vez? – willcodejavaforfood
No puedo replicar sus resultados. Obtengo '(future_2_day - Time.now)/86400 # => 1.99977137731481'. Estoy en EST (EE. UU.) Y nuestros relojes no vuelven durante este tiempo. Por lo tanto, debe ser un problema de horario de verano. –
DST me muerde el culo dos veces al año, todos los años. Pensarías que aprendería. – DanSingerman