• ベストアンサー

DateDiff関数の怪!?

 とある作業に対して、開始時刻と終了時刻とを入力し、作業時間を求めるプログラムを作っていて気がついたのですが、理解困難な状態になってます。 作業時間=DateDiff(”h”,[作業開始], [作業終了]) で、何時間かを求めようとした場合です。 例) 作業開始=9:00:00 作業終了=9:15:00 の時 DateDiff("h",~) = 0 ※正しい 作業開始=9:50:00 作業終了=10:05:00 の時 DateDiff("h",~) = 1 ※違うぞ  前者の場合は問題ないとして、後者の場合にDateDiffが1を返すのは納得がいきません。同じ15分間なのに。  試しに、DateDiff("h", TimeSerial(9,59,59), TimeSerial(10,0,0)) を計算させても、1を返してきます。  単に、Hour([終了時刻])-Hour([開始時刻])をしているにすぎない動作です。  SQL Server の DateDiff も同じ動きでした。  DateDiffってそんなものなんでしょうか。 ※これで大バクを出してしまいました・・(テスト不足と言われればそれまでですが)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ヘルプを良く読んだほうが良いでしょうねぇ 12 月 31 日とその次の年の 1 月 1 日を比較すると、DateDiff 関数の年 ("yyyy") は、1 日後であっても、1 を返します。 こう言った内容が記載されていますので、関数の特性も理解できるのではないですか

その他の回答 (1)

  • hamha
  • ベストアンサー率61% (83/135)
回答No.2

>前者の場合は問題ないとして、後者の場合にDateDiffが >1を返すのは納得がいきません。同じ15分間なのに。 >単に、Hour([終了時刻])-Hour([開始時刻])をしているにすぎない動作です。 DateDiff関数は、時間間隔の単位での結果を求めます。 ですから、 作業開始=9:50:00 作業終了=10:05:00 の時は、 10 - 9 = 1 となります。これで正常です。 時間間隔が "h" ですから 分、秒の部分は無視されます。 これが不都合なら時間間隔を 分 "n" にして計算した後、時間に換算するなどすれば良いでしょう。