2010-12-14 13 views
9

La función de fecha en OS X (Snow Leopard) no tiene la opción --date como la versión GNU y no puedo averiguar cómo obtener el equivalente a la siguiente en OS X:Loop desde la fecha de inicio hasta la fecha de finalización en el script de shell de Mac OS X

startdate=2010-01-01 
enddate=2010-01-31 
foldate="$startdate" 

until [ "$foldate" == "$enddate" ] 
do 
    # do something with the date here - like pass it as a parameter to a command 
    foldate=`/bin/date --date "$foldate 1 day" +%Y-%m-%d` 
done 

soluciona con respuestas de SiegeX:

startdate=2010-01-01 
enddate=2010-01-31 

sDateTs=`date -j -f "%Y-%m-%d" $startdate "+%s"` 
eDateTs=`date -j -f "%Y-%m-%d" $enddate "+%s"` 
dateTs=$sDateTs 
offset=86400 

while [ "$dateTs" -le "$eDateTs" ] 
do 
    date=`date -j -f "%s" $dateTs "+%Y-%m-%d"` 
    printf '%s\n' $date 
    dateTs=$(($dateTs+$offset)) 
done 
+0

Me alegro de ver que funcione para usted. No estoy seguro de qué versión de 'bash' OSX tiene (si es que tiene bash), pero si lo hace, debe envolver sus comandos en' $() 'en lugar de backticks como' sDateTs = $ (date -j -f ...) 'y use corchetes dobles' [['en vez de' '' para que pueda hacer 'mientras [[" $ dateTS "<" $ eDateTs "]]' – SiegeX

Respuesta

1

Leer página de manual de la fecha mediante la ejecución de man date y considerar la opción -v. He aquí un extracto:

-v Ajuste (es decir, tomar la fecha actual y mostrar el resultado de el ajuste; en realidad no establece la fecha) el segundo, minuto, hora, día, mes, día de la semana, mes o año según val. Si val va precedido por un signo más o menos, la fecha es ajustada hacia adelante o hacia atrás según a la cadena restante; de ​​lo contrario, se establece la parte correspondiente de la fecha . La fecha puede ser ajustada tantas veces como sea necesario usando estos indicadores. Los indicadores son procesados ​​en el orden indicado.

+1

SiegeX, lo hice, pero no puedo entender cómo cambiaría cualquier cosa que no sea el resultado de la fecha con esa opción. En otras palabras, puedo agregar un día a "ahora" con la fecha -j -v + 1d, pero ¿cómo agregaría un día a un día arbitrario? –

+0

El problema con -v es "tomar la fecha actual ..." (de la página de manual y más arriba). No quiero modificar la fecha actual, necesito modificar una fecha arbitraria, una que especifique. –

+0

@hglattergotz parece que lo único que puede hacer es guardar la fecha actual en una variable, luego establecer la fecha en $ foldate y usar '-v' para obtener el desplazamiento de eso. Finalmente, establezca la fecha en su valor original – SiegeX

Cuestiones relacionadas