计算2天之间的天数tcl

时间:2012-04-23 15:13:55

标签: date tcl

我正在计算两个日期之间的天数(2个日期以秒为单位)。以下给出了coorect结果,但它给了我一个负值。

例如-7.0。我不确定为什么......

我也可以删除小数点并显示吗?

        set interval [expr { $start_date - $get_date }]
        set days [expr { floor($interval / (60*60*24)) }]
        puts "Start Date: $start_date <br>"
        puts "Stop Date: $get_date <br>"
        puts "Total number of dates betwen 2 days: $days"

2 个答案:

答案 0 :(得分:3)

你从一开始就减去结尾(假设$get_date是什么)。把它想象成数字,后面的日期是一个更大的数字 - 如果你从一个小数字中减去一个大数字,你会得到一个负值,对吗?

所以你可能只想反转算术:

set interval [expr { $get_date - $start_date }]

我不知道小数点部分,我害怕......也许(基于this documentation)只是:

set days [expr { int($interval / (60*60*24)) }]

编辑:正如评论中所述,当谈到两个事件之间的“天”时需要注意。您的意思是经过的天数,每天24小时或“当地”天数?您的输入值是以当地时间,UTC还是其他?您是否可以使用专用的日期/时间库来处理此问题? (我不知道tcl是否有这样的东西,但我希望它能。)

你应该仔细考虑 ,确切地知道在什么情况下你想要什么样的行为,并相应地编写测试。

答案 1 :(得分:3)

并非所有日子都是86400秒,因为夏令时很少。因此,您需要在计算中进行一些舍入(并使用浮点除法):

set days [expr {round($interval / double(60*60*24))}]

在计算间隔的长度时,通常也会从结尾处减去开始,而不是相反。获得正确的符号。