2012-04-23 152 views
0

我正在計算兩個日期之間的天數(兩個日期以秒爲單位)。以下給我的coorect結果,但它給了我一個負值。計算2天之間的天數tcl

例如-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" 

回答

3

您從一開始就減去結尾(假設這是$get_date)。把它看作數字,後面的日期是一個更大的數字 - 如果你從一個小數中減去一個大數,你會得到一個負值,對嗎?

所以你可能只是想扭轉算術:

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

我沒有關於小數點部分的想法,我怕......也許(基於this documentation)剛:

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

編輯:正如評論中指出的那樣,當涉及到兩個事件之間的「天」時需要注意一些。你的意思是過去的日子,每天24小時或「當地」日子?你的輸入值是在當地時間,UTC還是別的?你可以使用專用的日期/時間庫來處理這個問題嗎? (我不知道tcl是否有這樣的事情,但我期望它。)

你應該仔細考慮究竟是什麼樣的行爲,你想在什麼情況下,並相應地寫測試。

+0

由於DST更改,在此情況下最好使用'round'。 – 2012-04-23 15:21:17

+0

哇我愚蠢..有無論如何,我可以刪除小數點? – Micheal 2012-04-23 15:21:38

+0

好的,謝謝Jon&Donal – Micheal 2012-04-23 15:22:11

3

不是所有的日子都是86400秒,因爲夏令時這樣的小事情。正因爲如此,你需要做在你的計算某些圓整(和使用浮點除法):

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

也通常是從最終計算區間的長度時減去開始,而不是其他全面。獲得正確的標誌。