2017-09-02 2 views
1

obtenir dernière date dimanche en sortie à partir d'une date donnée (non date) comme entréeComment puis-je obtenir la dernière date de dimanche à partir d'une date donnée dans unix

Exemple d'entrée: 30/08/2017 (% m-% d-% Y)

sortie doit être dimanche dernier: 08-27-2017

===

Toutes les commandes ci-dessous utilisent jour en cours comme référence .Mais je veux donner la date de référence comme entrée pour avoir le dernier dimanche. S'il vous plaît aidez-moi avec la commande.

date +% m-% d-% Y -d "2017-09-10 -7 jours"

date +% m-% d-% Y -d "dernier Soleil"

+0

La date d'entrée sera-t-elle toujours au format «% m-% d-% Y» de votre côté? – RomanPerekhrest

Répondre

0

J'espère que cette solution ci-dessous peut vous aider:

export day=08-30-2017 
date -d "$day -$(date -d $day +%w) days" 

ce sera toujours imprimer le dimanche avant la date donnée (ou la date elle-même).

date -d "$day -$(date -d $day +%u) days" 

Ceci affichera toujours le dimanche précédant la date donnée (et jamais la date elle-même).

+0

Pour avoir le dernier lundi d'une date donnée? qu'est-ce qui devrait être changé? Comme je veux le dernier dimanche, lundi, mar, mer .. jusqu'à la date donnée en entrée.S'il vous plaît aidez-moi avec ce –

+0

@DivyaS pour obtenir lundi: 'date -d" $ jour - $ (date -d $ jour +% u) jours + 1 jour "' et continuer à ajouter des jours pour le mardi et le mercredi. Essaye ça. –

+0

Dernière modification annulée. Pourquoi avez-vous copié/collé la réponse de @RomanPerekhrest? – Toto

1

Si vous traitez avec un format de date fixe %m-%d-%Y, il doit être transformé au format %Y-%m-%d à traiter par date fonction:

d='08-30-2017' 
d=${d##*-}-${d%-*} 
lst_sunday=$(date -d "$d -$(date -d $d +%u) days" +"%m-%d-%Y") 

echo $lst_sunday 
08-27-2017 

+%u - Format interprété specificator, jour de la semaine (1. .7); 1 est lundi

+0

Pour obtenir le dernier lundi d'une date donnée? qu'est-ce qui devrait être changé? Comme je veux le dernier dimanche, lundi, mar, mer .. jusqu'à la date donnée en entrée. S'il vous plaît aidez-moi avec ceci. –

+0

Merci beaucoup –

+0

@DivyaS, vous êtes les bienvenus – RomanPerekhrest

0

Très simple Way-

calcule d'abord dayofweek de date donnée. Ce sera 1-7. Pour lundi c'est 1 etc ... Samedi 6 et dimanche 7.

Soustrayez ensuite dayofweek de la date donnée. C'est ton dernier dimanche.

$ givenDate="08-30-2017" 
$ dayofweek=$(date -j -f '%m-%d-%Y' $givenDate +'%u') 
$ date -j -f '%m-%d-%Y' -v-${dayofweek}d $givenDate +%m-%d-%Y 
08-27-2017