Como obtenho a data de término do mês anterior, com base na data de processamento?
Exemplos:
- Data de processamento = 15jan2015
- Data prevista = 31dec2014,
- Data de processamento = 10feb2015
- Data prevista = 31jan2015
shell-script
user128856
fonte
fonte
TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '1 day ago'
. Você recebe um erro porque não havia 2011-12-30 lá. Ou seja, o deslocamento do dia foi feito no horário do calendário. 2011-12-31 menos 31 dias fornece 30/11/2011 porque tira 31 de 31. Não leva 31 * 24 * 60 * 60 * 60 segundos do horário atual. Compare com oTZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'
que lhe dá o dia 29, ou seja, desta vez, a data em que ocorreu 24 * 60 * 60 * 60 segundos atrás.Aqui está uma versão que funciona no Mac OS, que usa o
date
utilitário BSD :date -v1d -v-1d +%d%b%Y
Os argumentos são aplicados em ordem. Você pode imaginar que uma data é canalizada de um argumento para o outro. Por exemplo:
date
) -> 06/03/2017-v1d
) -> 01/03/2017-v-1d)
-> 28-02-2017+%d%b%Y
) -> 28Fev2017Você pode atingir qualquer número de meses para frente ou para trás usando
date -v-1m -v1d -v-1d
, substituindo-1m
pelo número de meses para trás ou para frente (+1m
) desejado.Essa é a resposta genérica. Esta pergunta pergunta especificamente sobre datas relativas a uma data de início. O utilitário de data do Mac OS / BSD não permite que você forneça um carimbo de data para começar, mas é possível definir cada elemento de data individualmente:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 31 de dezembro de 2014fonte
Tente usar este código
fonte