2011-06-10 7 views
5

Je vais définir une variable de date (Say '08 -JUN-2011 ') et je veux faire des calculs basés sur cette date, à savoir,
1. Avoir le premier jour de la donnée le jour du mois.
2. Date antérieure du mois de la date donnée.
3. Dernier jour du mois de la date donnée. Tout ce que je sais est la manipulation en utilisant la date et l'heure du système actuel, mais je ne sais pas comment mettre en œuvre avec la date définie par l'utilisateur. J'ai besoin que cela soit réalisé en utilisant un script shell Linux.Linux Script - Date Manipulations

Toute aide sera appréciée.

Merci,
Karthik

+0

Pour # 1, vous voulez dire le jour de la semaine (du lundi au vendredi à-dire?), il sera toujours « 01 » pour la dayNum, n'est-ce pas? ;-) Bonne chance. – shellter

Répondre

9

Voici comment effectuer les manipulations par date GNU:

#!/bin/sh 

USER_DATE=JUN-08-2011 

# first day of the month 
FIRST_DAY_OF_MONTH=$(date -d "$USER_DATE" +%b-01-%Y) 

PREVIOUS_DAY=$(date -d "$USER_DATE -1 days" +%b-%d-%Y) 

# last day of the month 
FIRST_DAY_NEXT_MONTH=$(date -d "$USER_DATE +1 month" +%b-01-%Y) 
LAST_DAY_OF_MONTH=$(date -d "$FIRST_DAY_NEXT_MONTH -1 day" +%b-%d-%Y) 

echo "User date: $USER_DATE" 
echo "1. First day of the month: $FIRST_DAY_OF_MONTH" 
echo "2. Previous day: $PREVIOUS_DAY" 
echo "3. Last day of the month: $LAST_DAY_OF_MONTH" 

La sortie est:

User date: JUN-08-2011 
1. First day of the month: Jun-01-2011 
2. Previous day: Jun-07-2011 
3. Last day of the month: Jun-30-2011 
+0

Oh merci beaucoup cela a vraiment fonctionné. La réponse de tout le monde est bonne et la réponse de Gregg me va vraiment mieux. Merci! – Karthik

3

Cela va être contournés dans un script shell. Il vaut mieux utiliser Date :: Manip en perl, ou quelque chose de similaire dans un autre langage complet. Cependant, je peux penser à quelques manières de faire ceci avec la commande de date. Tout d'abord, vous pouvez utiliser un paramètre --date pour définir un point de départ pour ce jour, comme ceci:

 
$ date --date='08-JUN-2011' 
Wed Jun 8 00:00:00 EDT 2011 

Vous pouvez obtenir la date précédente comme ceci:

 
$ date --date='08-JUN-2011 -1 days' 
Tue Jun 7 00:00:00 EDT 2011 

Pour le dernier jour du mois, je voudrais juste revenir de 31 jusqu'à ce que la date ne manque pas. Vous pouvez vérifier $? pour que

 
$ date --date='31-JUN-2011';echo $? 
date: invalid date `31-JUN-2011' 
1 
$ date --date='30-JUN-2011';echo $? 
Thu Jun 30 00:00:00 EDT 2011 
0 

Pour le premier jour du mois ... qui est habituellement 01 :)

3

Comme vous utilisez Linux, vous avez hhopefully l'utilitaire de date GNU disponible. Il peut gérer presque n'importe quelle description d'une date relative à laquelle vous pensez.

Voici quelques exemples

date --date="last month" +%Y-%m-%d 
date --date="yesterday" +%Y-%m-%d 
date --date="last month" +%b 
x=$(date --date "10 days ago" +%Y/%m/%d) 

Pour en savoir plus à ce sujet voir GNU Date examples

Une fois que vous utilisez certains, vous pouvez le raccourci de votre collecte d'informations avec date --help, qui montre toutes les options de base (mais est parfois est difficile à interpréter.)

J'espère que cela aide.

+0

Merci pour le lien de référence et le support! – Karthik

0
$ date +%m/01/%Y 

Je suis venu ici à la recherche d'un moyen d'obtenir le premier jour du courant mois.

0

outil de dround Utilisation DateUtils:

mois actuel:

$ dround today -1 
2014-02-01 

Mois précédent

$ dround today -31 
2014-01-31 

Dernier jour du mois en cours:

$ dround today +31 
2014-02-28 

COU rse vous pouvez utiliser une date personnalisée au lieu de today, l'idée est d'arrondir à la baisse ou au maximum le jour-du-mois désiré, par ex. la prochaine première de la mois donné 2010-10-04:

$ dround 2010-10-04 +1d 
2010-11-01