AcePerl

 view release on metacpan or  search on metacpan

acelib/timesubs.c  view on Meta::CPAN

  struct tm ts1, ts2;
  BOOL wantMonth1, wantDay1, wantHours1, wantMins1, wantSecs1;
  BOOL wantMonth2, wantDay2, wantHours2, wantMins2, wantSecs2;
  double d;

  timeStruct (&ts1, t1, &wantMonth1, &wantDay1, &wantHours1, &wantMins1, &wantSecs1) ;
  timeStruct (&ts2, t2, &wantMonth2, &wantDay2, &wantHours2, &wantMins2, &wantSecs2) ;

  if (!wantMins1 || !wantMins2)
    return FALSE ;

  ts1.tm_sec = ts2.tm_sec = 0 ;

  d = difftime (mktime (&ts2), mktime (&ts1)) ;
  d /= 60;
  *diff = (int)d ;

  return TRUE ;
}

/**********************************************/

BOOL timeDiffHours (mytime_t t1, mytime_t t2, int *diff) 
{
  struct tm ts1, ts2;
  BOOL wantMonth1, wantDay1, wantHours1, wantMins1, wantSecs1;
  BOOL wantMonth2, wantDay2, wantHours2, wantMins2, wantSecs2;
  double d;

  timeStruct (&ts1, t1, &wantMonth1, &wantDay1, &wantHours1, &wantMins1, &wantSecs1) ;
  timeStruct (&ts2, t2, &wantMonth2, &wantDay2, &wantHours2, &wantMins2, &wantSecs2) ;

  if (!wantHours1 || !wantHours2)
    return FALSE ;

  ts1.tm_sec = ts2.tm_sec = 0 ;
  ts1.tm_min = ts2.tm_min = 0 ;

  d = difftime (mktime (&ts2), mktime (&ts1)) ;
  d /= (60 * 60);
  *diff = (int)d ;

  return TRUE ;
}

/**********************************************/

BOOL timeDiffDays (mytime_t t1, mytime_t t2, int *diff) 
{
  struct tm ts1, ts2;
  BOOL wantMonth1, wantDay1, wantHours1, wantMins1, wantSecs1;
  BOOL wantMonth2, wantDay2, wantHours2, wantMins2, wantSecs2;
  double d ;

  timeStruct (&ts1, t1, &wantMonth1, &wantDay1, &wantHours1, &wantMins1, &wantSecs1) ;
  timeStruct (&ts2, t2, &wantMonth2, &wantDay2, &wantHours2, &wantMins2, &wantSecs2) ;

  if (!wantDay1 || !wantDay2)
    return FALSE ;

  ts1.tm_sec = ts2.tm_sec = 0 ;	/* zero hours:mins:secs so get calendar days */
  ts1.tm_min = ts2.tm_min = 0 ;
  ts1.tm_hour = ts2.tm_hour = 0 ;

  d = difftime (mktime (&ts2), mktime (&ts1)) ;

  d /= (24 * 3600) ;
  *diff = (int)d ;

  return TRUE ;
}

/**********************************************/

BOOL timeDiffMonths (mytime_t t1, mytime_t t2, int *diff) 
{
  struct tm ts1, ts2;
  BOOL wantMonth1, wantDay1, wantHours1, wantMins1, wantSecs1;
  BOOL wantMonth2, wantDay2, wantHours2, wantMins2, wantSecs2;
  int mdiff;

  timeStruct (&ts1, t1, &wantMonth1, &wantDay1, &wantHours1, &wantMins1, &wantSecs1) ;
  timeStruct (&ts2, t2, &wantMonth2, &wantDay2, &wantHours2, &wantMins2, &wantSecs2) ;

  if (!wantMonth1 || !wantMonth2)
    return FALSE ;

  mdiff = ts2.tm_mon - ts1.tm_mon ;

  *diff = mdiff ;

  return TRUE ;
}

/**********************************************/

BOOL timeDiffYears (mytime_t t1, mytime_t t2, int *diff) 
/* NOTE: is always true, i.e. every date/time has a year */
{
  struct tm ts1, ts2;
  BOOL wantMonth1, wantDay1, wantHours1, wantMins1, wantSecs1;
  BOOL wantMonth2, wantDay2, wantHours2, wantMins2, wantSecs2;
  int yeardiff;

  timeStruct (&ts1, t1, &wantMonth1, &wantDay1, &wantHours1, &wantMins1, &wantSecs1) ;
  timeStruct (&ts2, t2, &wantMonth2, &wantDay2, &wantHours2, &wantMins2, &wantSecs2) ;

  yeardiff = ts2.tm_year - ts1.tm_year ;

  *diff = yeardiff ;

  return TRUE ;
}

/**********************************************/

/* compare two dates, returns boolean result of comparison depending on operator */
BOOL timeComparison (int      op,
		     mytime_t timeLeft, 
		     mytime_t timeRight)
/* op is the operator and is one of



( run in 1.034 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )