2016-11-06 26 views
0

ここで説明します。私は人々が何かをやっていた時間をログに記録するサイトで働いています。問題は、誰かが何かをやっているときに23時から2時までと言うときです。私が今使っているスクリプトは、それが21時間だと言っています。昨日から明日までのJavaScriptの計算時間

第2の問題は、小数点で分を計算することです。たとえば1:15は1,25です。これは本当に大きな問題ではありませんが、私の二次的問題は数分で結果を得ることですか?

私の主な質問は、ある日から別の日に条件を設定するにはどうすればよいですか?

これは私が今持っているものです。

$(function() { 
     $("#check").click(function() { 
      var start = $(".preveri_ure").val(); 
      var end = $(".preveri_ure_2").val(); 
      s = start.split(':'); 
      e = end.split(':'); 
      min = e[1]-s[1]; 
      hour_carry = 0; 
      if(min < 0){ 
       min += 60; 
       hour_carry += 1; 
      } 
      hour = e[0]-s[0]-hour_carry; 
      min = ((min/60)*100).toString() 
      diff = hour + "," + min.substring(0,2); 
      $("#show").text("Task lasted for : " + diff + "hours"); 
    }); 

EDIT:

開始と終了の時間は、この形式で入力フィールドにユーザーが入力されている: スタート:7時 終了20: 15

また、時差は常に24時間未満です。したがって、日付は必須ではありません。

+0

です。どんな種類の入力要素を使用していますか?ちょうど時間を集めているのなら、それはあなたの問題です。完全な日付を収集する必要があります。 –

+0

開始時刻と終了時間は、入力フィールドに次の形式で入力します。開始:7:00終了20:15 私の質問を編集しました。ありがとう! –

+0

さて、完全な日付が入力されるように変更する必要があります。 'input type = date'を使うことができます。 –

答えて

1

@Scott Marcusと完全に同意します。ちょうど時間と分ではなく完全な日付があれば比較が簡単です。

@Studio DnBの観点からは、 は、開始日と終了日が同じ日に属するとします。ドロップダウン選択では開始時間は終了時間よりも短くなければなりません。ここで

コード

var tempStartDate = new Date(); // just inintialise start and end date 
var tempEndtDate = new Date();  
s = date1.split(':'); 
e = date2.split(':'); 
tempStartDate.setHours(s[0], s[1], 0); // set Hours and Minutes for start and end date 
tempEndtDate.setHours(e[0], e[1], 0); 

var startTime ; 
var endTime ; 
    // compare to make start time less then end time always for same day log 
if (tempEndtDate.getTime() > tempStartDate.getTime()){ 
     endTime = tempEndtDate.getTime(); 
     startTime= tempStartDate.getTime(); 
    } 
else { 
     endTime = tempStartDate.getTime(); 
    startTime= tempEndtDate.getTime(); 
} 

    var difference = endTime - startTime; 

    var hoursDifference = Math.floor(difference/1000/60/60); 
    difference -= hoursDifference*1000*60*60 

    var minutesDifference = Math.floor(difference/1000/60); 
    difference -= minutesDifference*1000*60 

例でありこれは `start`と` end`値がユーザにより入力されたように見えるhttps://jsfiddle.net/fNPvf/32377/

+0

うわー!!! 。パラメータなしで関数を使用し、ドロップダウンの値を変数に渡すことができます。幸せなコーディング。ありがとう – monikapatel

+0

ほとんどのことが考えられますが、開始時間23:00と終了時間02:00には21時間と表示されます。 –

+0

条件が必要です。時間1が時間2より大きい場合は、この計算を使用するよりも時間差が大きくなります。したがって、23:00〜2:00は24-(23-2)でなければなりません。実際に私はこれが正しい条件だと思います:if(tempEndtDate.getTime()> tempStartDate.getTime()){ しかし、私は時間の差異をelse文に入れる必要がありますか? –

3

最初の時間が2番目の時間より大きい場合は、2番目の時間が2番目の時間に加算されます。

より良い解決策は、それぞれJavaScript Dateオブジェクトから作成して減算することです。 endDateにと分に変換 -

+0

1日以上の場合はどうなりますか?その場合、あなたの提案は1日以上失われます。 –

+0

@ScottMarcusもしそれが一日以上あれば、彼が持っているものは何もする時間がない。私は決してそれ以上の日ではないと仮定します。彼の質問をもう一度読んで、これが真実であることを確認してください。投票を削除してください –

+0

あなたの答えが正しくないのはそのためです。 –

0

は私が次にたstartDateを計算する1月1日からの秒に1970年 http://www.w3schools.com/jsref/jsref_utc.asp を特定のdateTimeに変換JavascriptをUTCに日付と時刻を入力し、使用するユーザーを必要とします。

関連する問題