0

2つの日付の間の日数を計算しています(2つの日付は秒単位です)。次の結果は正しい結果になりますが、負の値になります。

たとえば、-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 }]

小数点の部分についてはわかりません。恐れ入ります...おそらく(このドキュメントに基づく)次のようになります。

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

編集:コメントに記載されているように、2つのイベント間の「日」に関しては注意が必要です。経過日数、1日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 に答える