0

我正在计算两个日期之间的天数(两个日期以秒为单位)。以下给了我 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"
4

2 回答 2

3

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

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

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

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

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

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

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

于 2012-04-23T15:18:30.017 回答
3

并不是所有的日子都是 86400 秒长,因为像夏令时这样的小事情。因此,您需要在计算中进行一些舍入(并使用浮点除法):

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

在计算间隔长度时,通常还从结尾减去开始,而不是反过来。得到正确的标志。

于 2012-04-23T15:19:05.273 回答