CFLib.org – Common Function Library Project

splitDateSpanToDays(spanStart, spanEnd)

Last updated March 18, 2010
Download UDF

author

Rodion Bykov Rodion Bykov

Version: 0 | Requires: ColdFusion 5 | Library: DateLib

 
Rated 0 time(s). Average Rating: 0

Description:
Function splits date span into array of periods (smaller date spans), from first day to last day.

Return Values:
Returns an array.

Example:

<cfset spanStart = dateAdd("d", -2, Now()) />
<cfset spanEnd = dateAdd("h", -2, Now()) />
<cfset periods = splitDateSpanToDays(spanStart, spanEnd) />

<cfdump var="#spanStart#" />
<cfdump var="#spanEnd#" />
<cfdump var="#periods#" />

Parameters:

Name Description Required
spanStart Start date Yes
spanEnd End date Yes

Full UDF Source:

<cfscript>
/**
* Splits date span to array of days (periods)
*
* @param spanStart      Start date (Required)
* @param spanEnd      End date (Required)
* @return Returns an array.
* @author Rodion Bykov (rodionbykov@gmail.com)
* @version 0, March 18, 2010
*/

function splitDateSpanToDays(spanStart, spanEnd){

    var result = arrayNew(1);
    var period = structNew();
    var firstDayStart = now();
    var firstDay = arguments.spanStart;
    var firstDayEnd = createDateTime(year(firstDay), month(firstDay), day(firstDay), 23, 59, 59);
    var currentDay = now();
    var lastDayStart = now();
    var lastDay = arguments.spanEnd;
    var lastDayEnd = createDateTime(year(lastDay), month(lastDay), day(lastDay), 23, 59, 59);
    var daysBetween = 0;
    var i = 0;
    
    if (dayOfYear(firstDay) eq dayOfYear(lastDay)) {
        period = structNew();
        period.start = firstDay;
        period.end = lastDay;
        temp = arrayAppend(result, period);
    }else{
        firstDayStart = createDateTime(year(firstDay), month(firstDay), day(firstDay), 0, 0, 0);
        lastDayStart = createDateTime(year(lastDay), month(lastDay), day(lastDay), 0, 0, 0);
        daysBetween = dateDiff("d", firstDayStart, lastDayStart) - 1;
        
        period = structNew();
        period.start = firstDay;
        period.end = firstDayEnd;
        temp = arrayAppend(result, period);
        
        if (daysBetween gt 0) {
            for (i = 1; i lte daysBetween; i = i + 1) {
                period = structNew();
                currentDay = dateAdd("d", i, firstDayStart);
                period.start = currentDay;
                currentDay = dateAdd("d", i, firstDayEnd);
                period.end = currentDay;
                temp = arrayAppend(result, period);
            }
        }
        
        period = structNew();
        period.start = lastDayStart;
        period.end = lastDay;
        temp = arrayAppend(result, period);
        
    }
    
    return result;
}
</cfscript>

Search CFLib.org


Latest Additions

Shawn Porter Shawn Porter added
DeMoronize
3 hour(s) ago

Chris Carey Chris Carey added
readPropertiesFi...
1 day(s) ago

Randy Johnson Randy Johnson added
lastDayofWeek
3 day(s) ago

Frank Marion Frank Marion added
sitemapPing
7 day(s) ago

Top Rated

James Sleeman                                     QuickSort
Rated 5.0, 3 time(s)

Barney Boisvert indentXml
Rated 5.0, 3 time(s)

Nathan Dintenfass                                 queryColumnsToSt...
Rated 5.0, 3 time(s)

Kevin Pepperman generateSsccAsn
Rated 5.0, 3 time(s)

Created by Raymond Camden / Design by Justin Johnson