Comment obtenir la date de fin du mois précédent, en fonction de la date de traitement?
Exemples:
- Date de traitement = 15jan2015
- Date prévue = 31déc2014,
- Date de traitement = 10fév2015
- Date prévue = 31jan2015
shell-script
user128856
la source
la source
TZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '1 day ago'
. Vous obtenez une erreur car il n'y avait pas de 2011-12-30. Autrement dit, le décalage du jour a été effectué sur l'heure du calendrier. Le 31/12/2011 moins 31 jours vous donne le 30/11/2011 car il en prend 31 de moins 31. Il ne prend pas 31 * 24 * 60 * 60 * 60 secondes de l'heure actuelle. Comparez avecTZ=Pacific/Apia faketime '2011-12-31 12:00' date -d '24 hour ago'
qui vous donne le 29, c'est-à-dire cette fois la date à laquelle il y a 24 * 60 * 60 * 60 secondes.Voici une version qui fonctionne sur Mac OS, qui utilise l'
date
utilitaire BSD :date -v1d -v-1d +%d%b%Y
Les arguments sont appliqués dans l'ordre. Vous pouvez en quelque sorte imaginer qu'une date est transmise d'un argument à l'autre. Par exemple:
date
) -> 2017-03-06-v1d
) -> 2017-03-01-v-1d)
-> 2017-02-28+%d%b%Y
) -> 28fév2017Vous pouvez atteindre n'importe quel nombre de mois en avant ou en arrière en utilisant
date -v-1m -v1d -v-1d
, en remplaçant-1m
par le nombre de mois en arrière ou en avant (+1m
) que vous souhaitez.Voilà la réponse générique. Cette question porte spécifiquement sur les dates par rapport à une date de début. L'utilitaire de date Mac OS / BSD ne vous permet pas de fournir un horodatage pour commencer, mais vous pouvez définir chaque élément de date individuellement:
date -v2015y -v1m -v15d -v1d -v-1d +%d%b%Y
-> 31déc2014la source
Essayez d'utiliser ce code
la source