cree que quiere decir restar la fecha de inicio de la fecha de finalización :)
Nader
99
tipo de anticlimático eh?
Brig
18
nota: si está utilizando Wirble en irb (para colorear la salida), el número racional tendrá un 1 concatenado al final. ¡Ay! es posible que desee usar to_i para convertir el resultado a un número entero
jwal
9
Si tiene un DateTimeobjeto, asegúrese de convertirlo Dateprimero, de lo contrario, devolverá una cantidad de segundos (supongo).
Joshua Muheim
44
También tenga en cuenta que restar dos Dateobjetos le da un Rationalque puede que necesite escribir en un número entero, como con(endDate - beginDate).to_i
MusikAnimal
98
irb(main):005:0> a =Date.parse("12/1/2010")=>#<Date: 4911063/2,0,2299161>
irb(main):007:0> b =Date.parse("12/21/2010")=>#<Date: 4911103/2,0,2299161>
irb(main):016:0> c = b.mjd - a.mjd
=>20
La fecha juliana (JD) es el intervalo de tiempo en días y fracciones de un día desde el 1 de enero de 4713 a. C. a mediodía de Greenwich, calendario proleptico juliano.
La gama es un conjunto de series únicas. Y ...es un exclusivo rango literal.
Así beginDate..(endDate - 1)es igual. Excepto que no lo es.
En caso de que beginDate sea igual a endDate , el primer elemento será excluido debido a la unicidad y ...excluirá al último. Entonces, si queremos .countfechas entre hoy y hoy, devolverá 0.
Esta es una muy buena respuesta, si el beginDate es anterior al endDate, regresará 0, lo que funciona perfectamente en algunos casos. Además, si las dos fechas son iguales, devolverá 0. También devuelve un entero simple. Otras respuestas deben transformarse en enteros o puede que tenga que traducir a 0 si el resultado es negativo.
La fecha es en términos de días, por lo que no necesita hacer esto. Creo que su solución se vuelve relevante con las diferencias de fecha y hora.
suga_shane
1
Bueno, cuídate de lo que quieres decir con "entre" también ...
days_apart =(to - from).to_i # from + days_apart = to
total_days =(to - from).to_i +1# number of "selected" days
in_between_days =(to - from).to_i -1# how many days are in between from and to, i.e. excluding those two days
DateTime
objeto, asegúrese de convertirloDate
primero, de lo contrario, devolverá una cantidad de segundos (supongo).Date
objetos le da unRational
que puede que necesite escribir en un número entero, como con(endDate - beginDate).to_i
Esto utiliza un número de Julian Day modificado .
De wikipedia :
fuente
Esto puede haber cambiado en Ruby 2.0
Cuando hago esto me sale una fracción. Por ejemplo en la consola (ya sea irb o rails c)
Por supuesto, enviar a un int da el resultado esperado
Esto también funciona para objetos DateTime, pero debe tener en cuenta segundos, como este ejemplo
fuente
En Ruby 2.1.3 las cosas han cambiado:
fuente
¿Qué tal esto?
La gama es un conjunto de series únicas. Y
...
es un exclusivo rango literal.Así
beginDate..(endDate - 1)
es igual. Excepto que no lo es.En caso de que beginDate sea igual a endDate , el primer elemento será excluido debido a la unicidad y
...
excluirá al último. Entonces, si queremos.count
fechas entre hoy y hoy, devolverá 0.fuente
0
, lo que funciona perfectamente en algunos casos. Además, si las dos fechas son iguales, devolverá 0. También devuelve un entero simple. Otras respuestas deben transformarse en enteros o puede que tenga que traducir a 0 si el resultado es negativo.Esto funcionó para mí:
fuente
Prueba esto:
fuente
todo esto me condujo al resultado correcto, pero terminé haciendo
fuente
YYYY-MM-DD
formato, que es lo que todos deberían usar de todos modos.días = (endDate - beginDate) / (60 * 60 * 24)
fuente
Bueno, cuídate de lo que quieres decir con "entre" también ...
fuente