There was a need to calculate the Begin and End dates from a given Period/Year combination orĀ to calculate the month’s begin and end dates from a given date.
Like if you are given
Inputs: Period=3, Year=9,
Output: Begin and End dates will be 03/01/2009 and 03/31/2009 respectively.
Similarly if you were given a date say – 2/17/2009, the return Begin & End dates will be 02/01/2009 and 02/28/2009.
So, a simple BSFN was built to do the same, I thought it might help so shared here. Please do reply with better options/logic if you have any for the purpose.
The Input Parameters are as follows (Parameter Name – DataType)
1. jdInputDate – DATE
2. mnMonth – NUMBER
3. mnCenturyYear – NUMBER
Output Parameters are
1. jdBeginDate – DATE
2. jdEndDate – DATE
3. cErrorCode – CHAR
Listing of ER for Named ER: N5500006 ======================================================================= NAMED ER: Calculate Begin and End Dates for a Given Date ======================================================================= evt_StringDate_DESC evt_Month_MNTH evt_CenturyYear_CENTYR 0001 // =================================================== 0002 // Deepesh MD START 0003 // Calculate the Begin and End Dates for a given Date. 0004 // =================================================== 0005 // Get Begin End dates for Input Date 0006 If BF jdInputDate is greater than 0007 VA evt_Month_MNTH = date_month([BF jdInputDate]) 0008 VA evt_CenturyYear_CENTYR = date_year([BF jdInputDate]) 0009 // 0010 VA evt_StringDate_DESC = concat(concat(lpad([VA evt_Month_MNTH],'0',2),"/01/"),[VA evt_CenturyYear_CENTYR]) 0011 // 0012 Convert String To Date Format Mask BF jdBeginDate <- jdConvertedDate_DRQJ VA evt_StringDate_DESC -> szStringToConvert_VC10A "OSASE" -> szFormatMask_VC09A 0013 BF jdEndDate = add_months([BF jdBeginDate],1) 0014 BF jdEndDate = add_days([BF jdEndDate],-1) 0015 // 0016 Else 0017 // Get Begin End Dates for Period/Year 0018 If BF mnMonth is greater than And BF mnMonth is less than or equal to "12" And BF mnCenturyYear is greater than 0019 // 0020 VA evt_Month_MNTH = lpad(BF mnMonth,'0',2) 0021 VA evt_CenturyYear_CENTYR = lpad([BF mnCenturyYear],'0',2) 0022 // 0023 VA evt_StringDate_DESC = concat(concat([VA evt_Month_MNTH],"/01/"),[VA evt_CenturyYear_CENTYR]) 0024 // 0025 Convert String To Date Format Mask BF jdBeginDate <- jdConvertedDate_DRQJ VA evt_StringDate_DESC -> szStringToConvert_VC10A "OSASR" -> szFormatMask_VC09A 0026 BF jdEndDate = add_months([BF jdBeginDate],1) 0027 BF jdEndDate = add_days([BF jdEndDate],-1) 0028 Else 0029 // 0030 // ERROR, Either the Date or month/year should be passed 0031 // 0032 BF cErrorCode = "1" 0033 BF jdBeginDate = "" 0034 BF jdEndDate = "" 0035 End If 0036 // 0037 End If 0038 //
So hope this piece of logic helps many technical developers for getting the start & end Dates of a month.