Date command to obtain the last month is not working correctly..


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Date command to obtain the last month is not working correctly..
# 1  
Old 02-02-2010
Date command to obtain the last month is not working correctly..

Hello,
I could not find the exactly same post here.. so I will explain what I did to get the last month using date command.

I used
Code:
date +%Y-%m -d "-1 months"

to get the last month. However, the returned value of above command on 2009/10/31 was 2009 10 and not 2009 09.. and the returned value on 2009/12/31 was 2009 12 and not 2009 11.
When I tried it on 2010/01/31, it returned 2009 12, which is what I wanted.
So it seems if I try this command on 31 and if the previous month does not have 31, it fails to return the correct value..
This logic leads to me that it will also fail when I try it on 2010/03/29, 30, 31 because there is no 2010/02/29, 30, 31...
Is it how date command works?? What do I have to do to get the correct 'Last month' even on 31...

I really appreciate your help!

Last edited by vbe; 02-03-2010 at 05:20 AM.. Reason: rm bad tags. added code tags
# 2  
Old 02-03-2010
Which Operating System do you have?
# 3  
Old 02-03-2010
I have Redhat ES 4.5
# 4  
Old 02-03-2010
You can try fooling the system by pretending that it is always mid-month (untested).

Code:
date -d "$(date +%Y-%m-15) -1 month"

# 5  
Old 02-23-2010
MySQL

see the following date command examples

Code:
date -d "1 month ago"

using this we can manipulating the date.

see the following more examples.

The following example used for current date from ago

Code:
#date
Tue Feb 23 14:32:14 IST 2010

#date -d "1 day ago"
Mon Feb 22 14:32:18 IST 2010

#date -d "1 week ago"
Tue Feb 16 14:32:24 IST 2010

#date -d "1 month ago"
Sat Jan 23 14:32:29 IST 2010

 #date -d "1 year ago"
Mon Feb 23 14:32:35 IST 2009

The following example used for current date after

Code:
  #date
Tue Feb 23 14:35:00 IST 2010

#date -d "+1 day"
Wed Feb 24 14:35:05 IST 2010

#date -d "+1 week"
Tue Mar  2 14:35:09 IST 2010

#date -d "+1 month"
Tue Mar 23 14:35:14 IST 2010

#date -d "+1 year"
Wed Feb 23 14:35:21 IST 2011

# 6  
Old 02-23-2010
@ungalnanban

The o/p highlights the fact that his date command does not work if today's day number did not exist in the previous month.
e.g. 31/03/10 is a valid date but 31/02/10 is not. The o/s in use translates 31/02/10 into 03/03/10 ! Because the o/p wanted the previous month number it is wrong.
My circumvention is to fool "date" that is mid-month but I can't test the syntax without having a copy of Redhat.

Can you try it on your test system and post the results.
# 7  
Old 02-23-2010
That is what I had... when I execute that command on Dec/31/2009, it returns Dec/01/2009 not Nov/30/2009... I changed the system date to March/29, 30, 31 and tried that command... it returned March 1, 2, 3... It also does not work for next month on those days..
So...I guess this is the spec of date command...
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Obtain date for first Tuesday of every month

Hi , Please help me out to write a shell script to obtain the date of first tueday of every month. I am new to shell scripting. Appreciate your help Thanks. (7 Replies)
Discussion started by: prongs22
7 Replies

2. Shell Programming and Scripting

Help with getting last date of previous month and first date of previous 4th month from current date

I have requirment to get last date of previous month and the first date of previous 4th month: Example: Current date: 20130320 (yyyymmdd) Last date of previous month: 20130228 (yyyymmdd) First date of previous 4th month: 20121101 (yyyymmdd) In my shell --date, -d, -v switches are not... (3 Replies)
Discussion started by: machomaddy
3 Replies

3. UNIX for Dummies Questions & Answers

date command - getting previous month

Hi, On any given day, I want to capture the month that has gone by - said otherwise, how do I capture last month? expr date '+%m' - 1 Above expression is giving error. Please advise thanks ---------- Post updated at 09:28 AM ---------- Previous update was at 09:11 AM... (1 Reply)
Discussion started by: ab_2010
1 Replies

4. Shell Programming and Scripting

date command not working

hi #!usr/bin/perl -w local ($date) = `/sbin/date "+%D %X" ` ; print $date when i run this in ksh shell it is giving the below error sh: /sbin/date: not found but same code is working and displaying date and time in sh shell. what could be the reason. pls help (10 Replies)
Discussion started by: psthariharan
10 Replies

5. Shell Programming and Scripting

rsync is not correctly working

We are using Red Hat linux system. I am transferring my rman backup files to another server. Here is the command i am using to transfer the files. /usr/bin/rsync -avpP --delete /xyz/xyz/ 99.99.999.99::db110bkp Here is the rsync version. >rsync --version rsync version 3.0.6 ... (1 Reply)
Discussion started by: govindts
1 Replies

6. Shell Programming and Scripting

how to obtain date and day of the week from `date` command

Hi, does anybody know how to format `date` command correctly to return the day of the week? Thanks -A I work in ksh.... (1 Reply)
Discussion started by: aoussenko
1 Replies

7. UNIX for Dummies Questions & Answers

print previous month (current month minus 1) with Solaris date and ksh

Hi folks month=`date +%m`gives current month Howto print previous month (current month minus 1) with Solaris date and ksh (7 Replies)
Discussion started by: slashdotweenie
7 Replies

8. Shell Programming and Scripting

Use date command to find last month

#!/usr/bin/ksh Does anyone have a good way to set a variable to last month? For example, today is 20070810. I would like to use the date command to set a variable to last months %m code, which is 07. If I pluck this months value (08) and user expr to do simple math on it, it returns 7 (not... (5 Replies)
Discussion started by: Cbish68
5 Replies

9. Shell Programming and Scripting

if not working correctly

Anyone have an idea why this if statement does not work correctly? "test2.sh" 18 lines, 386 characters #!/usr/bin/sh WARNING=80 CRITICAL=95 check_it() { if ] || ];then echo "YES ] || ]" else echo "NO ] || ]" fi } check_it 80.1 check_it 81.1 (3 Replies)
Discussion started by: 2dumb
3 Replies

10. UNIX for Dummies Questions & Answers

Script not working correctly

I have a simple script that I want to run every 30 minutes but only when I execute it. I don't want it to be a crontab job. so i have for example date ls -l who sleep 1800 The first time it executes correctly but after the first time it nevers execute back again. It should execute after... (2 Replies)
Discussion started by: elchalateco
2 Replies
Login or Register to Ask a Question