我正在计算两个日期之间的天数(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"
答案 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))}]
在计算间隔的长度时,通常也会从结尾处减去开始,而不是相反。获得正确的符号。