dポイントプレゼントキャンペーン実施中!

 とある作業に対して、開始時刻と終了時刻とを入力し、作業時間を求めるプログラムを作っていて気がついたのですが、理解困難な状態になってます。

作業時間=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ってそんなものなんでしょうか。

※これで大バクを出してしまいました・・(テスト不足と言われればそれまでですが)

A 回答 (2件)

ヘルプを良く読んだほうが良いでしょうねぇ



12 月 31 日とその次の年の 1 月 1 日を比較すると、DateDiff 関数の年 ("yyyy") は、1 日後であっても、1 を返します。

こう言った内容が記載されていますので、関数の特性も理解できるのではないですか
    • good
    • 0

>前者の場合は問題ないとして、後者の場合にDateDiffが


>1を返すのは納得がいきません。同じ15分間なのに。

>単に、Hour([終了時刻])-Hour([開始時刻])をしているにすぎない動作です。

DateDiff関数は、時間間隔の単位での結果を求めます。
ですから、
作業開始=9:50:00 作業終了=10:05:00 の時は、
10 - 9 = 1
となります。これで正常です。

時間間隔が "h" ですから 分、秒の部分は無視されます。
これが不都合なら時間間隔を 分 "n" にして計算した後、時間に換算するなどすれば良いでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!