If you don't care about holidays, it's pretty easy to do it efficiently.  Just 
count the days and do a little edge checking to decide how many were weekends.  
You don't even have to consider leap year logic because that's included in the 
day count.

Just don't let the time span cross year 1582.  ;)

There's other oddities too.  For example, from 
http://en.wikipedia.org/wiki/Gregorian_calendar:

"In Alaska, the change took place when Friday, 6 October 1867 was followed 
again by Friday, 18 October after the US purchase of Alaska from Russia, which 
was still on the Julian calendar. Instead of 12 days, only 11 were skipped, and 
the day of the week was repeated on successive days, because the International 
Date Line was shifted from Alaska's eastern to western boundary along with the 
change to the Gregorian calendar."

Good luck.  ;)

-jh-

On Jun 16, 2011, at 4:04 PM, seme...@hotmail.com wrote:

> I guess the only way is to loop through all the dates and check their day of 
> week. I was hoping there was something slicker, but it doesn't look like it. 
> 
> Thanks Geert. that's some fine code there.
> 
> -Ryan
> 
> From: geert.jos...@daidalos.nl
> To: general@developer.marklogic.com
> Date: Thu, 16 Jun 2011 08:36:04 +0200
> Subject: Re: [MarkLogic Dev General] Net Working Days calculation?
> 
> Hi Ryan,
>  
> Fun question! Hadn’t done it yet, but that doesn’t matter. How about this? It 
> returns a list of all workable days. Wrap in a count to get a number. Perhaps 
> not the fastest/smartest solution, but it should get you going..
>  
> import module namespace functx = "http://www.functx.com"; at 
> "/MarkLogic/functx/functx-1.0-nodoc-2007-01.xqy";
>  
> let $holidays := (xs:date("2011-06-13")) (: second easter day:)
>  
> let $start := xs:date("2011-06-09")
> let $end := xs:date("2011-06-16")
>  
> return
>     for $day in (0 to days-from-duration($end - $start))
>     let $date := $start + xs:dayTimeDuration(concat("P",$day,"D"))
>     let $weekday := functx:day-of-week($date)
>     let $is-weekend := ($weekday = (0, 6))
>     let $is-holiday := exists(index-of($date, $holidays))
>     where not($is-weekend) and not($is-holiday)
>     return
>         $date
>  
> Kind regards,
> Geert
>  
> Van: general-boun...@developer.marklogic.com 
> [mailto:general-boun...@developer.marklogic.com] Namens seme...@hotmail.com
> Verzonden: donderdag 16 juni 2011 0:32
> Aan: general@developer.marklogic.com
> Onderwerp: [MarkLogic Dev General] Net Working Days calculation?
>  
> Has anyone done a Net Working Days calculation in XQuery? This would be the 
> number of business days between a start and end date. Holiday inclusion would 
> be awesome.
> 
> -Ryan
> 
> _______________________________________________ General mailing list 
> General@developer.marklogic.com 
> http://developer.marklogic.com/mailman/listinfo/general
> _______________________________________________
> General mailing list
> General@developer.marklogic.com
> http://developer.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
General@developer.marklogic.com
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to