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
Comment obtenir la date de fin du mois précédent, en fonction de la date de traitement?
Exemples:
Réponses:
Avec GNU date
:
$ date +%d%b%Y
16Aug2015
$ date -d "$(date +%Y-%m-01) -1 day" +%d%b%Y
31Jul2015
Certains shells ont un support intégré pour la manipulation de date:
Avec ksh93
:
$ printf "%(%d%b%Y)T\n" "1st day, yesterday"
31Jul2015
Avec zsh
:
$ zmodload zsh/datetime
$ strftime -s d %Y-%m-01-12 $EPOCHSECONDS
$ strftime -rs d %Y-%m-%d-%H $d
$ strftime %d%b%Y $((d-86400))
31Jul2015
Il existe de nombreuses façons de procéder; voici la plus simple que j'ai trouvée (en supposant ici GNU date
):
$ date -d "-$(date +%d) days"
Fri Jul 31 16:07:23 EDT 2015
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 avec TZ=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éc2014
Essayez d'utiliser ce code
date -d "-$(date +%d) days month" +%Y-%m-%d