|
of_relativedatetime
|
|
Full name
|
pfc_n_cst_datetime.of_relativedatetime
|
Access
|
public
|
Extend of
|
datetime
|
Return value
|
datetime
|
Prototype
|
public function datetime of_relativedatetime(datetime,long)
|
Name
|
Datatype
|
ld_sdate
|
date
|
ldt_null
|
datetime
|
ll_date_adjust
|
long
|
ll_time_adjust
|
long
|
ll_time_test
|
long
|
lt_stime
|
time
|
public function datetime of_relativedatetime (datetime adtm_start, long al_offset);//////////////////////////////////////////////////////////////////////////////
//
// Function: of_RelativeDatetime
//
// Access: public
//
// Arguments:
// adtm_start Starting datetime point of calculation.
// al_offset Number of seconds before/after datetime to be returned.
//
// Returns: Datetime
// Relative datetime.
// If any argument's value is NULL, function returns NULL.
// If any argument's value is Invalid, function returns 1900-01-01.
//
// Description: Given a datetime, find the relative datetime +/- n seconds
//
//////////////////////////////////////////////////////////////////////////////
//
// Revision History
//
// Version
// 5.0 Initial version
// 5.0.03 Fix to return time as 00:00:00:000000 on invalid date check
//
//////////////////////////////////////////////////////////////////////////////
//
// Copyright © 1996-1997 Sybase, Inc. and its subsidiaries. All rights reserved.
// Any distribution of the PowerBuilder Foundation Classes (PFC)
// source code by other than Sybase, Inc. and its subsidiaries is prohibited.
//
//////////////////////////////////////////////////////////////////////////////
datetime ldt_null
date ld_sdate
time lt_stime
long ll_date_adjust
long ll_time_adjust, ll_time_test
//Check parameters
If IsNull(adtm_start) or IsNull(al_offset) Then
SetNull(ldt_null)
Return ldt_null
End If
//Check for invalid date
If Not of_IsValid(adtm_start) Then
Return ldt_null
End If
//Initialize date and time portion
ld_sdate = date(adtm_start)
lt_stime = time(adtm_start)
//Find out how many days are contained
//Note: 86400 is # of seconds in a day
ll_date_adjust = al_offset / 86400
ll_time_adjust = mod(al_offset, 86400)
//Adjust date portion
ld_sdate = RelativeDate(ld_sdate, ll_date_adjust)
//Adjust time portion
// Allow for time adjustments periods crossing over days
// Check for time rolling forwards a day
If ll_time_adjust > 0 then
ll_time_test = SecondsAfter(lt_stime,time('23:59:59'))
If ll_time_test < ll_time_adjust Then
ld_sdate = RelativeDate(ld_sdate,1)
ll_time_adjust = ll_time_adjust - ll_time_test -1
lt_stime = time('00:00:00')
End If
lt_stime = RelativeTime(lt_stime, ll_time_adjust)
//Check for time rolling backwards a day
ElseIf ll_time_adjust < 0 then
ll_time_test = SecondsAfter(lt_stime,time('00:00:00'))
If ll_time_test > ll_time_adjust Then
ld_sdate = RelativeDate(ld_sdate,-1)
ll_time_adjust = ll_time_adjust - ll_time_test +1
lt_stime = time('23:59:59')
End If
lt_stime = RelativeTime(lt_stime, ll_time_adjust)
End If
return(datetime(ld_sdate,lt_stime))
end function
Name
|
Owner
|
systemfunctions.date |
systemfunctions
|
systemfunctions.datetime |
systemfunctions
|
systemfunctions.isnull |
systemfunctions
|
systemfunctions.mod |
systemfunctions
|
systemfunctions.relativedate |
systemfunctions
|
systemfunctions.relativetime |
systemfunctions
|
systemfunctions.secondsafter |
systemfunctions
|
systemfunctions.setnull |
systemfunctions
|
systemfunctions.time |
systemfunctions
|
pfc_n_cst_datetime.of_isvalid |
pfc_n_cst_datetime
|