Sponsored Content
Top Forums UNIX for Dummies Questions & Answers Months difference between 2 dates Post 302965773 by RavinderSingh13 on Tuesday 2nd of February 2016 11:46:05 PM
Old 02-03-2016
Hello keertis,

Welcome to forums, please use code tags as per forum rules for commands/codes/Inputs which you use into your posts.
Following may help you in same. Here I am considering that variable named date1's year value will be either equal or greater than the year's value of variable named date2. Here are the 2 examples which I have tried.
1st: Your provided Input_file as follows.
Code:
awk -vdate1="03-02-2016" -vdate2="15-11-2015" 'BEGIN{split(date1, A,"-");split(date2, B,"-");year_diff=A[3]-B[3];if(year_diff){months_diff=A[2] + 12 * year_diff - B[2] + 1;} else {months_diff=A[2]>B[2]?A[2]-B[2]+1:B[2]-A[2]+1};print months_diff}'

Output will be 4, as per your requirement shown.
2nd: In case(Here I am taking an example) where year's values in both variables are equal then following may help in same.
Code:
awk -vdate1="03-02-2015" -vdate2="15-11-2015" 'BEGIN{split(date1, A,"-");split(date2, B,"-");year_diff=A[3]-B[3];if(year_diff){months_diff=A[2] + 12 * year_diff - B[2] + 1;} else {months_diff=A[2]>B[2]?A[2]-B[2]+1:B[2]-A[2]+1};print months_diff}'

Output will be 10.
If this above doesn't meet your requirement then please do let us know all the scenarios of your request with your O.S details too, hope this helps.


EDIT: Also wanted to add 3rd point here if year difference is more than 1 then also it should work following is the example for same.
Code:
awk -vdate1="03-02-2017" -vdate2="15-11-2015" 'BEGIN{split(date1, A,"-");split(date2, B,"-");year_diff=A[3]-B[3];if(year_diff){months_diff=A[2] + 12 * year_diff - B[2] + 1;} else {months_diff=A[2]>B[2]?A[2]-B[2]+1:B[2]-A[2]+1};print months_diff}'

Output will be 16 then.

Thanks,
R. Singh

Last edited by RavinderSingh13; 02-03-2016 at 12:54 AM.. Reason: Added one more condition where years difference is more than 1 year.
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

deleting files with dates 3 months ago

please help me with this????? :confused: :confused: i need to create a program that will run in unix that will delete all files in a given directory that is at least 3 months old. first the program will need to automatically know what date it is right now to determine the files it will... (3 Replies)
Discussion started by: godalle
3 Replies

2. Shell Programming and Scripting

Difference between two dates...

Hi All, Wish you a Happy New year... I have to find the difference between two dates, the result should be the number of days. I have seen the "datecalc" function. Its good, can I have any other alternative. Thanks in Advance Raju (4 Replies)
Discussion started by: rajus19
4 Replies

3. Shell Programming and Scripting

Difference between two dates.

Hi all. My question may seems to be similar to one that already been here. But i need a little other solution. I have two dates in format dd/mm/yyyy. I need to find number of days between them. I need to do it in bash script. I am running on Solaris machine and have cutted 'date' command version... (1 Reply)
Discussion started by: kukuruku
1 Replies

4. Shell Programming and Scripting

Perl difference between dates

Hi, Is there any way I can get the difference between two dates in terms of days? I have used this method so far, but I cant format it in terms of days. @a=&DateCalc($date1,$date2,0); The o/p that I am getting is sort of like this: +0:0:0:4:0:0:0 I just want to get 4 days as an o/p.... (1 Reply)
Discussion started by: King Nothing
1 Replies

5. Shell Programming and Scripting

Difference between two dates

Hi! I have two parameters like this: YYYY-MM-DD YYYY-MM-DD My question is, there is a direct command for get the elapsed time between the 2 dates, or I have to find another way? Thx! (1 Reply)
Discussion started by: MalaTomi
1 Replies

6. UNIX and Linux Applications

sqlite: calculating with dates - compare current date minus 6 months with stored record

Hi I have a table with name, date in format DD.MM.YYYY. I need to something like this (I try to explain in pseudo code) if SYSDATE (current date) minus 6 months > $expiry date print OK else print NOK with $name and $expiry date I know this is possible with Oracle. How to do this... (0 Replies)
Discussion started by: slashdotweenie
0 Replies

7. Shell Programming and Scripting

Difference between two dates

hi all, I need a help for below requirement. Difference between two dates"12-11-2009" and "03-25-2012" (mm-dd-yy format") in weeks and days and hours Please help me for this. Thanks in adv.... I am working in AIX, so dont have below command:- date --version (2 Replies)
Discussion started by: gani_85
2 Replies

8. Shell Programming and Scripting

Difference between 2 dates

Hi Friends, I have a file that has the contents like below: file1.txt 5,13/07/2013 23:25:25,14/07/2013 19:40:21 5,13/07/2013 23:25:25,14/07/2013 19:40:43 5,12/07/2013 23:50:50,13/07/2013 20:30:26 5,12/07/2013 23:20:24,13/07/2013 19:40:53 60,14/07/2013 00:00:00,14/07/2013 23:00:39... (5 Replies)
Discussion started by: vsachan
5 Replies

9. Fedora

Difference of dates

I have a script which is printing date in below format while writing the logs. theDate=`date +"%m%d%Y"` theTime=`date +"%H%M%S"` echo $theDate $theTime How can i find out difference current time and above format. Appreciate your help. (6 Replies)
Discussion started by: srikanth38
6 Replies

10. UNIX for Beginners Questions & Answers

Difference between two dates

Hi There I am trying to find the difference between two dates in seconds, by taking the first 10 digits of the file name itself, which I have done as shown below: current_time=`date +%s` last_login_of_tim=`date -d @1489662376 +%s` diff_sec=$(($current_time-$last_login_of_tim)) ... (5 Replies)
Discussion started by: simpsa27
5 Replies
Date::Manip::Obj(3)					User Contributed Perl Documentation				       Date::Manip::Obj(3)

NAME
Date::Manip::Obj - Base class for Date::Manip objects SYNOPSIS
The Date::Manip::Obj class is the base class used for the following Date::Manip classes: Date::Manip::Base Date::Manip::TZ Date::Manip::Date Date::Manip::Delta Date::Manip::Recur This module is not intended to be called directly and performs no useful function by itself. Instead, use the various derived classes which inherit from it. DESCRIPTION
This module contains a set of methods used by all Date::Manip classes listed above. You should be familiar with the Date::Manip::Objects and Date::Manip::Config documentation. In the method descriptions below, Date::Manip::Date objects will usually be used as examples, but (unless otherwise stated), all of the classes listed above have the same methods, and work in the same fashion. METHODS FOR CREATING OBJECTS
In the examples below, any $date ($date, $date1, $date2, ...) variable is a Date::Manip::Date object. Similarly, $delta, $recur, $tz, and $base refer to objects in the appropriate class. Any $obj variable refers to an object in any of the classes. new There are two ways to use the new method. They are: $obj2 = new CLASS ($obj1,$string,@opts); $obj2 = $obj1->new($string,@opts) In both cases, all arguments are optional. Here, CLASS is the class of the new object. For example: $date = new Date::Manip::Date; $delta = new Date::Manip::Delta; if $obj1 is available, the new object will share as much information from the old object as possible. The class of the new object may be derived from the old object as well. For example, if you call either of these: $date2 = new Date::Manip::Date $date1; $date2 = $date1->new(); the new date object will use the same embedded Date::Manip::TZ object. In the second case, the class of the new object ($date2) is Date::Manip::Date because that is the class of the original object. When specifying CLASS and including an old object, objects do not need to be of the same class. For example, the following are all valid: $date = new Date::Manip::Date $delta; $date = new Date::Manip::Date $tz; You can even do: $date = new Date::Manip::Date $base; but this will have to create a completely new Date::Manip::TZ object, which means that optimal performance may not be achieved if a Date::Manip::TZ object already exists. There are two special cases. Either of the following will create a new Date::Manip::Base object for handling multiple configurations: $base2 = new Date::Manip::Base $base1; $base2 = $base1->new(); Either of the following will create a new Date::Manip::TZ object with the same Date::Manip::Base object embedded in it: $tz2 = new Date::Manip::TZ $tz1; $tz2 = $tz1->new(); The new base object will initially have the same configuration as the original base object, but changing it's configuration will not affect the original base object. If the @opts argument is passed in, it is a list reference containing a list suitable for passing to the config method (described below). In this case, a new Date::Manip::Base object (and perhaps Date::Manip::TZ object) will be created. The new Base object will start as identical to the original one (if a previously defined object was used to create the new object) with the additional options in @opts added. In other words, the following are equivalent: $date = new Date::Manip::Date $obj,@opts; $base = $obj->base(); $base2 = $base->new(); $date = new Date::Manip::Date $base2; $date->config(@opts); It should be noted that the options are applied to the NEW object, not the old one. That only matters in one situation: $base2 = new Date::Manip::Base $base1,@opts; $base2 = $base1->new(@opts); An optional string ($string) may be passed in only when creating a Date::Manip::Date, Date::Manip::Delta, or Date::Manip::Recur object. If it is passed in when creating a Date::Manip::TZ or Date::Manip::Base object, a warning will be issued, but execution will continue. If the string is included, it will be parsed to give an initial value to the object. This will only be done AFTER any options are handled, so the following are equivalent: $date = new Date::Manip::Date $string,@opts; $date = new Date::Manip::Date; $date->config(@opts); $date->parse($string); Note that it is generally not a good idea to pass in $string since all of the parse methods allow (but do not require) additional arguments, and this ability is not supported when passing in $string to the new method. As a result, it's generally a better practice to call the parse method separately. Once a Date::Manip::Date object (or any object in any other Date::Manip class) is created, it should always be used to create additional objects in order to preserve cached data for optimal performance and memory usage. The one caveat is if you are working with multiple configurations as described in the Date::Manip::Objects document. In that case, you may need to create completely new objects to allow multiple Date::Manip::Base objects to be used. new_config $obj2 = $obj1->new_config($string,@opts); This creates a new instance with a new Date::Manip::Base object (and possibly a new Date::Manip::TZ object). For example, $date2 = $date1->new_config(); creates a new Date::Manip::Date object with a new Date::Manip::TZ (and Date::Manip::Base) object. Initially, it is the same configuration as the original object. If the object is a Date::Manip::Base object, the following are equivalent: $base2 = $base1->new_config(); $base2 = $base1->new(); Both $string and @opts are optional. They are used in the same way they are used in the new method. new_date new_delta new_recur These are shortcuts for specifying the class. The following sets of calls are all equivalent: $date = $obj->new_date(); $date = new Date::Manip::Date($obj); $delta = $obj->new_delta(); $delta = new Date::Manip::Date($obj); These methods all allow optional ($string,@opts) arguments. OTHER METHODS
base tz $base = $obj->base(); This returns the Date::Manip::Base object associated with the given object. If $obj is a Date::Manip::Base object, nothing is returned (i.e. it doesn't create a new copy of the object). $tz = $obj->tz(); This returns the Date::Manip::TZ object associated with the given object. If $obj is a Date::Manip::TZ or Date::Manip::Base object, nothing is returned. config $obj->config($var1,$val1,$var2,$val2,...); This will set the value of any configuration variables. Please refer to the Date::Manip::Config manual for a list of all configuration variables and their description. get_config @var = $obj->get_config(); $val = $obj->get_config($var1); @val = $obj->get_config($var1,$var2,...); This queries the current config values. With no argument, it will return the list of config variables (all lowercase). With one or more arguments, it returns the current values for the config variables passed in (case insensitive). err $err = $obj->err(); This will return the full error message if the previous operation failed for any reason. $obj->err(1); will clear the error code. is_date is_delta is_recur $flag = $obj->is_date(); Returns 0 or 1, depending on the object. For example, a Date::Manip::Date object returns 1 with the is_date method, and 0 for the other two. version $vers = $obj->version($flag); This returns the version of Date::Manip. If $flag is passed in, and $obj is not a Date::Manip::Base object, the version and timezone information will be passed back. KNOWN BUGS
None known. BUGS AND QUESTIONS
Please refer to the Date::Manip::Problems documentation for information on submitting bug reports or questions to the author. SEE ALSO
Date::Manip - main module documentation LICENSE
This script is free software; you can redistribute it and/or modify it under the same terms as Perl itself. AUTHOR
Sullivan Beck (sbeck@cpan.org) perl v5.16.3 2014-06-09 Date::Manip::Obj(3)
All times are GMT -4. The time now is 08:44 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy