Version 0 of Number of business days

Updated 2006-01-23 18:27:17

I'm trying to (efficiently) calculate the arrival date of a package given a start date and number of business days it is supposed to take to arrive. I think this might be of interest to others. Here's my first cut at it:

    proc add_days {start days} {
    set 1day [expr {3600 * 24}]

    set end [expr {$start + [days2seconds $days]}]

    set diff [expr {$end - $start}]

    set weeks [expr {$diff / ($1day * 7)}]

    set remainder [expr {($diff - $weeks * $1day * 7) / $1day}]

    set startdow [clock format $start -format "%u"]
    set enddow   [clock format $end -format "%u"]

    set add 0
    incr add [expr {$weeks * 2}]
    incr add [expr {$startdow > $enddow ? 2 : 0}]
    incr add [expr {$startdow == 6 ? 2 : 0}]
    incr add [expr {$startdow == 7 ? 1 : 0}]

    set realend [expr {$end + $add * $1day}]
    set realenddow   [clock format $realend -format "%u"]


    set add [expr {$realenddow == 6 ? 2 : 0}]
    incr add [expr {$realenddow == 7 ? 2 : 0}]
    puts "ordered on [clock format $start] and should take $days days"
    puts "arrival on [clock format [expr {$realend + $add * $1day}]]"
    }