age in months for yyyy-mm-dd format


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting age in months for yyyy-mm-dd format
# 1  
Old 04-11-2012
age in months for yyyy-mm-dd format

Hi,

I am trying to write a sh script which will give difference in given time to present time in months.

I get date from a script like

Code:
 
infoscript.sh | awk '{ print $3}' 

where infoscript is a custom script and gives date in yyyy-mm-dd format
ex: 2010-04-12


Now, need to do something like this

Code:
awk '{ print $3}' | { get age in months so that if its more than 3 months, I will run another script, say backup.sh}

I tried to search for date and age threads but there are too many of them and confusing me. Is there a simple approach to solve this.

Thank you for your time and response.

Last edited by rider29; 04-11-2012 at 07:10 PM..
# 2  
Old 04-11-2012
Determining a difference between dates is a common subject because it's so difficult on so many systems and so easy on a very few.

What's your system?
# 3  
Old 04-11-2012
Centos 6.0
# 4  
Old 04-11-2012
Assuming you have a version of date that supports +%s and -d (GNU date seems to do this), then this should work in either kshell or bash:

Code:
# returns success if date passed in is more than three months in the past
# assumes the date is in the form yyyy-mm-dd  mm and dd can be single digits.
function is_old
{
    if [[ -z $_now ]]                # "static" values set on first call
    then
        _dim=( 31 30 31 31 28 31 30 31 30 31 31 30 31 30 31 )        # days in months; yes -- 15 months!!

        _now=$(date +%s )
        _m=$(date +%Y%m )              # current month
        _y=${_m:0:4}


        if (( _y % 4 == 0 ))         # works until 2100, so keep it simple
        then
            _dim[4]=29               # leap year this year
        fi
        (( _m = ${_m:4:2} + 2 ))      # proper index into dim

    fi

    typeset tdate=$(date -d $1 +%s )   # convert date to check into seconds past epoch
    typeset cutoff=$((  _now - (86400 * ( (_dim[_m-1] + _dim[_m-2] + _dim[_m-3]))) ))

    return $(( tdate > cutoff ))
}

# simple loop to read date from stdin
while read d
do
    if is_old $d
    then
        echo "old: $d"
    else
        echo "not: $d"
    fi
done



If you are not as particular about what "three months" means, and could accept calling something old if it is simply more than 90 days old, then you could use the function below --

Code:
function is_old
{
    return $((  $(date -d $1 +%s ) > $((  $(date +%s )  - (86400 * 90) ))  ))
}



It has 90 days hard coded, but you could change it to anything.

Last edited by agama; 04-11-2012 at 11:34 PM.. Reason: typo
This User Gave Thanks to agama For This Post:
# 5  
Old 04-12-2012
Quote:
Originally Posted by agama
Code:
function is_old
{
    return $((  $(date -d $1 +%s ) > $((  $(date +%s )  - (86400 * 90) ))  ))
}



It has 90 days hard coded, but you could change it to anything.
Thank you for your response. I was looking for a solution similar this but my system is not supporting "date + %s"
# 6  
Old 04-12-2012
Centos 6.0 not supporting date '+%s', that would be a new one. Could you verify this one more time?
# 7  
Old 04-12-2012
I just verified, the dev box I am working on is CentOS6.2 but this script will be run on CentOS6.0.

CentOS6.2 is giving me this

Code:
-bash: +%s: command not found

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Date format YYYY/MM/DD to DD/MM/YYYY

I am getting output of YYYY-MM-DD and want to change this to DD/MM/YYYY. When am running the query in 'Todd' to_date(column_name,'DD/MM/YYYY') am getting the required o/p of DD/MM/YYYY, But when am executing the same query(Netezza) in linux server(bash) am getting the output of YYYY-MM-DD file... (3 Replies)
Discussion started by: Roozo
3 Replies

2. Shell Programming and Scripting

How to get last 12 month date in YYYY.MM format?

I need the date format in YYYY.MM format and I am able to get current month date as well as previous month date with below command PM=`date +'%Y.%m' -d 'last month'` CM=`date +'%Y.%m' -d 'now'` but I need to get YYYY.MM date format for previous 12 months so could you please help me how I get... (2 Replies)
Discussion started by: Amit Joshi
2 Replies

3. Shell Programming and Scripting

Date Format MM/DD/YYYY

I am changing epoch times to dates. I was able to do the following: echo "$varx" | gawk '{print strftime("%c", $0)}' Mon Dec 31 16:26:40 2012 This changes the epoch date (which is what varx is) into localtime. However, my problem is that I only want 12/31/2012 and not the Mon Dec 31... (2 Replies)
Discussion started by: newbie2010
2 Replies

4. Shell Programming and Scripting

Convert any date format into yyyy/mm/dd

How can I convert any user inputted date into yyyy/mm/dd ? For example user can input date one of the following 20120121 , 2012-01-21 ,01/21/2012,01/21/2012 etc But I need to convert any of the date entered by user into yyyy/mm/dd (2012/01/2012). Any suggestion. Thanks in advance this is... (1 Reply)
Discussion started by: ZeroHedge
1 Replies

5. Shell Programming and Scripting

Day of year to dd.mm.yyyy format

Hi, How can I convert day of year value in format(yy,doy) to normal formatted (dd.mm.yyyy) string also all of them with awk or awk system function? in_file.txt --------- 12,043 12,044 12,045 12,046 out_file.txt ---------- 12.02.2012 13.02.2012 14.02.2012 15.02.2012 imagine... (5 Replies)
Discussion started by: kocaturk
5 Replies

6. Shell Programming and Scripting

need code for date which is in yyyy-mm-dd format

Hi, I am having one log files. contains som data according to date. And it is going to append .Eg:abc.log contains below data 2011-10-19 abjhgj 2011-10-19 gjhgjgj 2011-10-20 hhhjh 2011-10-20 hhhhjj 2011-10-21 gg . . . 2011-11-24 yyy from log files i want catch only... (2 Replies)
Discussion started by: aish11
2 Replies

7. Shell Programming and Scripting

Need date in the format [mm dd yyyy hh AM/PM]

could you please help be on the below code .. Requirement is when i pass the parameter(for below 2) i should get current time -2 hours in the format :wall:.. cur_dt=`$ICEBIN/sqsh -S$DSQUERY -U $BATCHID -P $PASSWD -h -C"select getdate()" | sed '2d'` pr_dt="`$ICEBIN/sqsh -S$DSQUERY -U $BATCHID... (2 Replies)
Discussion started by: karthicss
2 Replies

8. Shell Programming and Scripting

change date format from yyyy/mm/dd to dd/mm/yyyy

(Attention: Green PHP newbie !) I have an online inquiry form, delivering a date in the form yyyy/mm/dd to my feedback form. If the content passes several checks, the form sends an e-mail to me. All works fine. I just would like to receive the date in the form dd/mm/yyyy. I tried with some code,... (6 Replies)
Discussion started by: keyboarder
6 Replies

9. Shell Programming and Scripting

date and time in mm/dd/yyyy hh:mm format

Frens, I have a logfile which has got manier things in it and somewer in that file i have a date in mm/dd/yyyy hh:mm format.... I just need to get the date and time nothing else.... i have searched in this forum for it but got only date in mm-dd-yyyy format.. but i need to search for... (10 Replies)
Discussion started by: smarty86
10 Replies

10. UNIX for Dummies Questions & Answers

Format date from MM/DD/YYYY to YYYYMMDD

I have a file with some date columns in MM/DD/YYYY format: SMPBR|DUP-DO NOT USE|NEW YORK||16105|BA5270715|6/6/2007 |MWERNER|109||||JOHN||SMITH|MD|72211118||||||74559|21 WILMINGTON RD||D|11/6/2003|SL# MD CONTACT-LIZ RICHARDS|||0|Y|N||1411458| And I want to convert the date format to: ... (5 Replies)
Discussion started by: ChicagoBlues
5 Replies
Login or Register to Ask a Question