• ベストアンサー

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" にして計算した後、時間に換算するなどすれば良いでしょう。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelで同じ関数を複数のセルで計算させたい場合

    Excelを勉強しはじめたばかりの者です。 タイトルを含め用語や表現の仕方が間違いばかりだと思いますが、 どうぞよろしくおねがいいたします。 C2に勤務の開始時刻、D2に終了時刻を入れ、 E2に =hour(D2-C2) と打ち、合計時間が出るようにしています。 1行を1日分に使っていますが、 日が増えるたびにE3に =hour(D3-C3)、E4に =hour(D4-C4) …と打っていくのではなく、 開始時刻と終了時刻を入れる作業のみで合計時間を出したいのです。 なにか方法はありますでしょうか、お知恵を貸していただけますと大変助かります。

  • VB6で時刻の範囲に入っているか調べたいのですが。

    nenonenoです。こんばんわ。 VBで時間Aから時間Bの範囲に時間Cが入っているかを調べる関数を作ろうとしていますが、初心者なので混乱しています。 Now,DateDiff、DateSerialを使えばよさそうな事は分かったのですが、、、具体的なアルゴリズムが思い浮かびません。 時間A(7:00)、時間B(18:00)、時間C(今)の場合は問題ないのですが、時間Aが(21:00)、時間Bが(7:00)、時間C(今)になった時(つまり、日がまたがった場合)にお手上げです。 varNow = Now ' Now 関数は現在の日付と時刻を返します。 ' 開始時刻と終了時刻 varFrom = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intFromHour, intFromMin, 0) ' 開始時刻 varTo = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intToHour, intToMin, 0) ' 終了時刻 ここまでは書いたのですが、どう判定させて計算したらよいのでしょうか? なにか、ヒントだけでも教えていただけるとありがたいです。 よろしくお願いします。

  • ファイルメーカーによる勤務時間計算を簡単にする方法についてお尋ねします

     出勤退庁が全く不定時な特殊派遣業務の管理作業をファイルメーカーPro9で行っております。  派遣報酬は時間制で、 実働時間(30分単位)×職務別時間制定額+深夜(22時~5時)従事時間×深夜加算定額  により構成されています。  不定時な出勤退庁の例は下記のとおりです。 (勤務)開始時刻~終了時刻(実働時間、深夜時間)      9:00~18:00(実働9.0H、深夜0)      20:00~3:00(実働7.0H、深夜5.0H)       23:00~7:30(実働8.5H、深夜6.0H)        23:30~4:00(実働4.5H、深夜4.5H)        1:00~4:30(実働3.5H、深夜3.5H)        2:00~9:00(実働7.0H、深夜3.0H)        21:00~7:00(実働10.0H、深夜7.0H)        まず実働時間の計算ですが、入力は上記の時刻どおり行うため、翌日にまたがる勤務のときはそのままだと実働時間がマイナスになります。 これを避けるため、その場合は終了時刻に1日(86400秒)を加算する次の式を定義しております。  出退庁時刻等の定義は、次のとおりです。 出勤時刻→「開始時刻」 退庁時刻→「終了時刻・入力」と「終了時刻・換算」 実働時間→「実働時間・時刻」と「実働時間・数値」 終了時刻・換算=If( 開始時刻>終了時刻・入力; 終了時刻・入力 + 86400; 終了時刻・入力 )  そして実働時間は 実働時間・時刻=終了時刻・換算-開始時刻  とし、これを数値化するため、 実働時間・数値=Hour(実働時間・時刻 ) + Round(Minute(実働時間・時刻) / 60; 2 )  としております。  さて最大の問題は前記実働時間中の深夜従事時間の算出です。  まずフィールド定義を 深夜開始=Time(22; 0;0) 深夜終了=Time(5; 0; 0) 深夜終了29時=Time(29; 0; 0 ) 深夜従事時間=深夜時間 深夜時間の数値=深夜時間・数値  とし、次の式により深夜従事時間を求めています。 深夜時間=If(終了時刻・換算 > 深夜開始; If( 終了時刻・換算> 深夜終了29時; 深夜終了29時;終了時刻・換算 )-If( 開始時刻>深夜開始; 開始時刻; 深夜開始 );0) + If( 終了時刻・換算>深夜終了; 深夜終了; 終了時刻・換算 )- If(開始時刻 <深夜終了; 開始時刻; 深夜終了 )  これを数値化するため、 深夜時間・数値=Hour(深夜時間) + Round( Minute(深夜時間) / 60; 2 )  以上が一連の式の流れですが、これらの式は何とも冗長で分かりにくいので、もっと簡単で分かりやすい計算式ができないか、悪戦苦闘しましたがいい智恵が浮かびません。  思い余ってファイルメーカーの時間計算に詳しい方のご指導をいただきたく投稿しました。  よろしくお願いします。

  • エクセルでの表作成について(関数)

    添付した画像において、Dの「作業開始時刻」とEの「作業完了時刻」の数値を関数で表示したいです。 ・詳細 ある商品を作業者2人で製作します。 Bの発注番号に数字がある時に発注が来て、その次の時間に作業を開始します。 時間Cだけかかって作業が完了します。作業が完了した時点で次の発注が来ていれば、次の商品にすぐに取りかかります。 条件として、1つの商品に対しては1人しか作業できません。なので発注が1つの場合には2人目の作業者は待っている状態です。 また、2人とも作業をしていて発注がある場合は、どちらか早く終わったほうが作業につきます。 (Aの作業時間のところのA9:A10のように数字がダブっているのは同じ時間に2つ発注があった場合です) こんな感じなのですが・・・ わかりにくいかもしれませんが、よろしくお願いします。 図の具体的な解説をしますと、 時刻2に発注があり時刻3に1人目が作業開始し、10時間かかって時刻13に完了します。 時刻4の発注は1人目がまだ作業中なので、2人目が時刻5に開始して、7時間かかり時刻12に完了します。 発注番号3は2人とも作業中なので、早く作業が完了する2人目が、完了した時刻12に作業開始して、11時間かかり時刻23に完了します。 発注番号4は1人目が時刻13に完了するので、そこから開始して6時間かかり時刻19で完了します。

  • ファイルメーカーの関数(時刻関数)について

    ファイルメーカープロ11を使っていますが、 時刻の関数が分からず困っています。 やりたいことは、 2014/7/7 12:30~2014/7/8 7:15までの時間(つまり18.75H)を出したいのです。 時間の部分だけならhour関数で何とかできましたが、 分の部分は関数の作り方が分かりません。 ちなみに18H45Mではなく、18.75と出したいです。 どなたか教えて下さい。

  • ファイルメーカーの関数(時刻関数)について

    ファイルメーカープロ11を使っていますが、 時刻の関数が分からず困っています。 やりたいことは、 2014/7/7 12:30~2014/7/8 7:15までの時間(つまり18.75H)を出したいのです。 時間の部分だけならhour関数で何とかできましたが、 分の部分は関数の作り方が分かりません。 ちなみに18H45Mではなく、18.75と出したいです。 どなたか教えて下さい。

  • excel2007で時間計算の方法

    作業開始時刻   終了時刻    作業時間  9:00   17:00     7.00 のような計算式をしたいのですが  =TEXT(AG9-AC9,"h.mm")とすると8.00と表示されます。 12:00~13:00の一時間を引いて 7.00と表示 させたいのですが・・・ どうすればいいのでしょうか? 

  • エクセルの時間表記の変換

    エクセルでプロジェクト管理表を作っています。 9:30から10:00まで入力作業で働いたとして、 A       B       C 開始時刻  終了時刻  作業時間 9:30      10:00     00:30 上のように作業時間を0:30と算出することはできたのですが、 A       B       C       D 開始時刻  終了時刻  作業時間  作業時間(H) 9:30      10:00     00:30     0.5 それを上のように0.5という数値に変換させる方法はありますか? ちなみに、以下のように変換できれば嬉しいです。 0:15だと0.25 0:30だと0.5 0:45だと0.75 1:15だと1.25

  • Excel2003で時間計算結果のコピー

    時間表を作成し、開始時刻、終了時刻、作業時間、前作業終了時刻と今作業開始時刻との間隔を表示させてあります。(作業時間=終了時刻-開始時刻、間隔=今開始時刻-前終了時刻)この結果をコピーして数値として貼り付けたいのですが、通常の形式指定で値として貼り付けても出来ません。 又、終了時刻が24:00を超えると作業時間がエラーとなりますので、手で24:00を足して(01:00であれば25:00)ますが、これだと間隔時間がエラーとなる事があります。日付は現在入れてません。入れる事は可能ですが。 現状では、作業時間のトータル(Σ)をとっても結果が出ませんので、数値として貼り付け出来れば、計算が出来るのではと思い質問しました。

  • 時間の比較は可能でしょうか?

    <form name="time_hikaku"> 開始時刻 <input type="text" name="hour" maxlength="2"> <input type="text" name="min" maxlength="2"> 終了時刻 <input type="text" name="end_hour" maxlength="2"> <input type="text" name="end_min" maxlength="2"> </form> で入力した時刻を比較し、終了時刻が開始時刻 より小さい場合にAlert表示したいのですが、 どうすれば、Javascriptで時刻比較できますでしょうか? 09:00 8:00など、0が入力される可能性もあるので、 時間関数などがあればできそうですが。。

このQ&Aのポイント
  • MFC735CDWでクリーニングできないエラーが発生し、FAXやコピーが利用できません。
  • Windows11を使用しているパソコンからUSB接続でMFC735CDWを利用しています。
  • ひかり回線を使用していますが、電話回線の種類に問題はありません。
回答を見る