Date difference using perl


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Date difference using perl
# 1  
Old 06-25-2018
Date difference using perl

Hi All,

I am using the below code to get the days difference between 2 dates

Code:
ddate="05/31/2018"
bdate="06/10/2018"
diff=$(perl -e 'use Time::Local;
my ($month1,$day1,$year1)=split /\W+/, $ENV{'ddate'};
my ($month2,$day2,$year2)=split /\W+/, $ENV{'bdate'};
my $time1 = timelocal($sec1,$min1,$hour1,$day1,$month1,$year1);
my $time2 = timelocal($sec2,$min2,$hour2,$day2,$month2,$year2);
$time = ($time2 - $time1)/86400;
print $time;')
echo $diff

When i try to run the script I get the below error

Code:
Day '31' out of range 1..30 at -e line 4

I understand that this is due to the array placement in perl, but i am not sure how to get the script working. Please help on this.
# 2  
Old 06-25-2018
The month range in Time::Local names is from 0 to 11 not from 1 to 12.

See: Time::Local - Day '31' out of range 1..30

Subtract 1 from the month number and it will work. Otherwise you hit the error here that "5" is not May but June, which has 30 Days and causes an error.
# 3  
Old 06-25-2018
Hi,

thanks for the reply.

If i use "-1" with month, then i get the below error.

Code:
diff=$(perl -e 'use Time::Local;
my ($month1,$day1,$year1)=split /\W+/, $ENV{'ddate'};
my ($month2,$day2,$year2)=split /\W+/, $ENV{'bdate'};
my $time1 = timelocal($sec1,$min1,$hour1,$day1,$month1-1,$year1);
my $time2 = timelocal($sec2,$min2,$hour2,$day2,$month2-1,$year2);
$time = ($time2 - $time1)/86400;
print $time;')

Month '-1' out of range 0..11 at -e line 4

How do i change the month here ?
# 4  
Old 06-25-2018
-1 is not a valid value vor month either.

You may use "debug prints" in your code to verify the values of the variables.
# 5  
Old 06-25-2018
No. What stomp means is perl uses a zero based month: i.e., January is zero ... so June is 5. perl is based on the standard C library, and timelocal is being supplied with what amounts to a struct tm in the C language.
From the man page:

Code:
      struct tm {
               int tm_sec;    /* Seconds (0-60) */
               int tm_min;    /* Minutes (0-59) */
               int tm_hour;   /* Hours (0-23) */
               int tm_mday;   /* Day of the month (1-31) */
               int tm_mon;    /* Month (0-11) */
               int tm_year;   /* Year - 1900 */
               int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
               int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
               int tm_isdst;  /* Daylight saving time */
           };

This is the same thing, almost, as your ($sec, $min, $hour,.....)

Try: Time::Local - perldoc.perl.org

Last edited by jim mcnamara; 06-25-2018 at 10:22 AM..
# 6  
Old 06-25-2018
Works OK for me here with the new -1 version:


Code:
$ export ddate="05/31/2018"
$ export bdate="06/10/2018"
$ diff=$(perl -e 'use Time::Local;
 my ($month1,$day1,$year1)=split /\W+/, $ENV{'ddate'};
 my ($month2,$day2,$year2)=split /\W+/, $ENV{'bdate'};
 my $time1 = timelocal($sec1,$min1,$hour1,$day1,$month1-1,$year1);
 my $time2 = timelocal($sec2,$min2,$hour2,$day2,$month2-1,$year2);
 $time = ($time2 - $time1)/86400;
 print $time;')
$ echo $diff
10

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Difference between two date

Hi, I created a script for finding the duration of a job using the start and end time of the job. But the command doesnt calculate correct value if the duration is more than 24 hours. Any help would be really good . cat test1 --- start time 03/27/15 17:41:00 03/24/15 11:58:04 03/23/15... (3 Replies)
Discussion started by: rogerben
3 Replies

2. AIX

Time Difference between date and date -u

Hi Everyone, We are having an issue with date and date -u in our AIX Systems. We have checked environment variable TZ and /etc/environment and however, we could not rectify the difference. >date Thu Mar 19 22:31:40 IST 2015 >date -u Thu Mar 19 17:01:44 GMT 2015 Any clue... (5 Replies)
Discussion started by: madhav.kunapa
5 Replies

3. Shell Programming and Scripting

Date difference

HI All , i need a bash script to find the number of days between two dates . Format YYYY-MM-DD THanks, Neil (1 Reply)
Discussion started by: nevil
1 Replies

4. Programming

Date difference

I tried the below code to find difference between two dates. It works fine if the day of the month is 2-digit number. But it fails when we have a single-digit day of month(ex:1-9). my code is as below. please help me soon. #!/usr/bin/perl -w use strict; use Time::Local; ... (2 Replies)
Discussion started by: anandrec
2 Replies

5. Shell Programming and Scripting

Difference in date

Dear all, I fancy that I'm pretty competent in ksh, but I have someone on HP-UX wanting me to script up a simple interface to handle user alterations rather than giving them high privileges to run up SAM. This is all fairly straightforward, but I'm stuck on an epoch date issue. When we have... (6 Replies)
Discussion started by: rbatte1
6 Replies

6. Shell Programming and Scripting

difference in date

Hi All! I would like to know the time difference between two dates which are in same format... $ date -r abc Thu Oct 29 09:40:37 EDT 2009 $ date Fri Oct 30 02:07:03 EDT 2009 i would like to find the diff between these two dates in hours..please help..:) Regards, Kiran (3 Replies)
Discussion started by: dddkiran
3 Replies

7. Shell Programming and Scripting

Date Difference in PERL

Hi I have a file which has start time as my first line and End time in last line start time: 23 May 2008 03:30:33 End time : 23 May 2008 04:30:00 I have to extract these two lines and find the time of execution for the script in PERl. Any help appreciated Thanks (1 Reply)
Discussion started by: usshell
1 Replies

8. Linux

date difference

hi, i have 2 dates in the form: '20080315120030' and '20080310140030'. i.e. YYYYMMDDHHMMSS. i need a way of getting the difference between them using shell script. any thoughts? (14 Replies)
Discussion started by: muay_tb
14 Replies

9. UNIX for Dummies Questions & Answers

date difference

Hi Can any buddy give mi a simple program or logic or command which will get difference between two dates ex:diff between 20051008 2005908 is 24hours 12 min 2 sec regards (1 Reply)
Discussion started by: rajuMBT
1 Replies

10. UNIX for Advanced & Expert Users

date difference

Hi...I need some help with a date script. I need to allow the user to enter the month (alpha) day (int) and year (YYYY) and count the difference in number of days since Jan 1, 1952 to the users date. I've been messing with this for about 10 hours and I think I'm just making the script worse =( ... (1 Reply)
Discussion started by: mtnbaby
1 Replies
Login or Register to Ask a Question