skip to main | skip to sidebar

Perl Programming Language Tutorial

Pages

  • Home
 
  • RSS
  • Twitter
Saturday, October 20, 2012

Perl function to compare two dates

Posted by Raju Gupta at 11:38 AM – 3 comments
 

This function can be used to compare two dates using PERL. The function accepts two string(date) arguments, let's say date1 and date2 and returns
0 - If the two dates are equal.
1 - If the date1 passed is greater than date2.
-1 - If the date1 passed is less than date2

Note: The Dates to be passed should be in the following format
YYYY-MM-DD HH:MI:SS

Please find here below Sample script in which this function is called:  

#! /usr/bin/env perl 

my $mstr_cdate1 = "2008-04-29 12:00:09"; 
my $mstr_cdate2 = "2008-04-28 22:00:09"; 

my $mint_retval = fstr_compareDateAndTime($mstr_cdate1, $mstr_cdate2); 

print $mint_retval; 

********************************** 

Output in this case is 1 as date1 is greater than date2. 
 
 ########################################################################   
# Name                  : fstr_compareDateAndTime
#   
# Description           : compare two dates using Perl
#   
# Parameters            : 1. Date1  (string)   
#                         2. Date2  (string)   
#   
# Return                : Integer. This function can be used to compare two dates using PERL. The function accepts two string(date) #arguments, let's say date1 and date2 and returns
#    0    -  If the two dates are equal.
#    1    -  If the date1 passed is greater than date2.
#          -1    -  If the date1 passed is less than date2
#   
# Calls functions       : fstr_compareDateAndTime   
#   
# Executables Called    : None   
#   
# Perl Modules Used     : None   
######################################################################## 
sub fstr_compareDateAndTime($$)
{
 # answers how does date1 compare to date2
 # (greater than "1", less than "-1", or equal to "0")
 my ($mstr_date1, $mstr_date2) = @_;
 
 my @marr_date1;
 my @marr_date2;
 my $mint_limit =0;
 
 
 my ($mstr_onlydate1, $mstr_onlytime1) = split(/ /, $mstr_date1);
 push(@marr_date1,split(/-/, $mstr_onlydate1));
 push(@marr_date1,split(/-/, $mstr_onlytime1));
 
 my ($mstr_onlydate2, $mstr_onlytime2) = split(/ /, $mstr_date2);
 push(@marr_date2,split(/-/, $mstr_onlydate2));
 push(@marr_date2,split(/-/, $mstr_onlytime2));
 
 # compare up to the lesser number of elements
 # (like if one datetime only has a date and no time, don't try to compare time)
 if(@marr_date1 == @marr_date2) { $mint_limit = @marr_date1 }
 elsif (@marr_date1 > @marr_date2) { $mint_limit = @marr_date2 }
 elsif (@marr_date1 < @marr_date2) { $mint_limit = @marr_date1 }
 
 
 for (my $mint_count = 0; $mint_count < $mint_limit; $mint_count++)
 {
  if ($marr_date1[$mint_count] > $marr_date2[$mint_count]) { return 1; last; }# date1 greater than date2
  if ($marr_date1[$mint_count] < $marr_date2[$mint_count]) { return -1; last; }# date1 less than date2
 }
 return 0;# dates are equal
}
 

Labels: Perl Date Example Email This BlogThis! Share to X Share to Facebook

3 Responses so far.

  1. Unknown says:
    February 9, 2016 at 3:31 AM

    This script not validate the following scenario.

    2015-07-01 00:50:00,2015-07-01 00:00:00, returns : 0

  2. Unknown says:
    February 9, 2016 at 5:18 AM

    This is a dreadful example, and putting a comment block at the start gives it an air of authority that it doesn't possess

    - Don't use Hungarian notation. "fstr_" is meaningless to most people and is generally necessary only with strictly-typed languages that can't otherwise convey the type of a variable. "@marr_" is especially silly because the "@" tells us that it's an array, and "$mint_" is unenforceable because Perl variables may hold many value types simultaneously

    - Don't use subroutine prototypes. ($$) here almost certainly doesn't do what you think it does. It gives no advantage and will break your code under sime circumstances

    - When you write "split / /" you almost certainly mean "split ' '"

    - "@marr_date1" and "@marr_date2" should be "@date" and "@time". Adding numbers to the end of variable names is rarely meaningful

    - You shouldn't declare any variables until you need them. That is usually where they are first defined

    - You say nothing about the format of the date-times that your subroutine accepts (see the comment above) but unless you want to support the parameters having different parameters then your entire subroutine is better discarded and written as

    my $retval = $cdate1 cmp $cdate2


  3. Unknown says:
    February 9, 2016 at 5:22 AM

    This is a dreadful example, and putting a comment block at the start gives it an air of authority that it doesn't possess

    - Don't use Hungarian notation. "fstr_" is meaningless to most people and is generally necessary only with strictly-typed languages that can't otherwise convey the type of a variable. "@marr_" is especially silly because the "@" tells us that it's an array, and "$mint_" is unenforceable because Perl variables may hold many value types simultaneously

    - Don't use subroutine prototypes. ($$) here almost certainly doesn't do what you think it does. It gives no advantage and will break your code under sime circumstances

    - When you write "split / /" you almost certainly mean "split ' '"

    - "@marr_date1" and "@marr_date2" should be "@date" and "@time". Adding numbers to the end of variable names is rarely meaningful

    - You shouldn't declare any variables until you need them. That is usually where they are first defined

    - You say nothing about the format of the date-times that your subroutine accepts (see the comment above) but unless you want to support the parameters having different parameters then your entire subroutine is better discarded and written as

    my $retval = $cdate1 cmp $cdate2


Leave a Reply

Newer Post Older Post
Subscribe to: Post Comments (Atom)
  • Popular
  • Recent
  • Archives

Popular Posts

  • Perl function to compare two dates
    This function can be used to compare two dates using PERL. The function accepts two string(date) arguments, let's say date1 and date2...
  • File size and modified time
    When we pass the file name (include full path) as parameter,It will give us the size of the file and last modified time. sub getFileSt...
  • Perl function to check whether file or dir name passed to it readable or not
    The function makes sure that the path (directory and/or file) passed to it as an Input parameter is readable or not   use constant SU...
  • Perl script to find files older than x minutes
    This script can be used to find files in a windows directory older than 40 min. List can be emailed to a user also. Script can be modi...
  • Sepearte First name and last name by using PERL regular expressions
    We are using PERL regular expression. We are using 3 functions prxparse,prxmatch and prxposn. Prxparse takes regularexpression an...
  • Perl function to check whether the passed path is empty or not
    The function makes sure that the path (directory and/or file) passed to it as an Input parameter is empty or not. use constant SUCCESS ...
  • Perl function to trim leading and trailing spaces from a string
    Leading and trailing spaces, if any present, are trimmed and the string is returned back to the caller. If a NULL string is passed, the func...
  • Fix Message Reader from Log
    Various subroutines of the package FixUtil can be used to read fix message (tag, value pair). Fix message can be extracted. Tag and Value ca...
  • Login screen using Perl
    This code snippet takes one parameter for default user and displays a login screen asking for user name and password . It aslo provides a...
  • Script to rotate any log file
    This script creates a copy of standard out log files of Weblogic Server after it has reached a predefined size limit,renames it with current...
Powered by Blogger.

Archives

  • ▼  2012 (24)
    • ▼  October (24)
      • Sepearte First name and last name by using PERL re...
      • Validate Info-Perl Script
      • Print Message--Perl Script
      • Password encryption-Perl Script
      • Convert to Seconds--Perl script
      • File size and modified time
      • Convert to minute-Perl script
      • Login screen using Perl
      • Huge text file comparator
      • Parse Input - Perl Script
      • Get colored difference - Perl Script
      • Perl function to compare two dates
      • Script to rotate any log file
      • Cross Referencing script
      • Random Bunch Creation in Perl
      • NASDAQ Status checker using Perl
      • Fix Message Reader from Log
      • Perl script to find files older than x minutes
      • Perl function to check whether the passed path is ...
      • Date Arimatic
      • Perl function to trim leading and trailing spaces ...
      • Perl function to check whether the passed path is ...
      • Perl function to check whether file or dir name pa...
      • Perl function to check whether the passed path is ...
 

Followers

Labels

  • File Searching Example (1)
  • Perl Date Example (2)
  • Perl Encryption Example (1)
  • Perl File Example (2)
  • Validation Example (1)
 
 
© 2011 Perl Programming Language Tutorial | Designs by Web2feel & Fab Themes

Bloggerized by DheTemplate.com - Main Blogger