Ya no necesitas indagar más por internet porque llegaste al espacio exacto, tenemos la respuesta que necesitas recibir sin complicaciones.
Solución:
Solución 1:
ring0 me ganó por unos segundos, pero el comando completo es:
echo $(($(date --utc --date "$1" +%s)/86400))
Esto va por hora UTC. Resultado:
[email protected]:~# echo $((`date --utc --date "$1" +%s`/86400))
14984
Una comprobación rápida con WolframAlpha muestra que este es el valor correcto.
Solución 2:
Creo que este es el método más simple:
expr $(date +%s) / 86400
Solución 3:
los date
comando puede darle el número de segundos desde 1970-01-01 00:00:00 UTC
.
date +"%s"
Puedes dividir el resultado por 3600*24
para obtener el número de días (UTC).
Por ejemplo, en Bash
x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))
para mostrar el número de días.
Solución 4:
También necesitaba resolver esto, pero quería obtener el mismo valor para el día, independientemente de la hora del día. Con enfoques como los que se muestran aquí, el valor cambiará a la medianoche UTC en lugar de la medianoche hora local. Esto probablemente parezca un problema menor en la UE o la costa este de EE. UU., que están lo suficientemente cerca de UTC como para que el valor del día no cambie en medio de un día laboral típico, pero en, por ejemplo, California, el cambio de día ocurriría a las 4 p.m. PST, lo que podría ser un inconveniente. Imagino que a los australianos les molestaría especialmente que el valor del día cambiara a última hora de la mañana.
Si queremos corregir eso, debemos agregar el desplazamiento de UTC antes de dividir por segundos/día. Afortunadamente, el comando date de Linux incluye un %z secuencia de formato que informa el desplazamiento de UTC. Mientras que el formato estándar (este resultado es para la hora de Denver, MDT):
$ date +%z
-0600
. . . no se puede usar directamente en un cálculo, los modificadores correctos producirán lo que queremos:
$ date +%-:::z
-6
Ponga eso junto con las conversiones habituales de segundos/horas/días, y creo que lo siguiente debería generar los días desde el 1/1/1970, siendo el 1/1/1970 el día cero y el valor incrementándose a la medianoche hora local:
echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))
Este cálculo simple no funcionará para zonas horarias que no estén compensadas con UTC por horas enteras (p. ej., India, TZ=Asia/Kolkata), ya que el “+5:30” producido por date +%-:::z
producirá un error de “carácter no válido en la expresión” cuando se use en la declaración anterior.