0

JavaScript で作成した一部のコードに問題があります。24時間時計の2つの時間の差を計算したい. データは 2 つの入力時間フィールドから取得されます。

<input type="time" id="start" />
<input type="time" id="end" />

このため、時刻は文字列 00:00 になり、数値計算には役立ちません。

私がそれを解決した方法は、最後から最初を差し引くことでした。これは、終了時刻の方が大きい場合は完全に機能しますが、終了時刻が 11:00 (00:00) を過ぎている場合、負の数になります。終了が開始より低い場合、結果に 24 を追加しようとしましたが、それでも負の数が得られます。これはばかげた質問のように思えるかもしれませんが、私は数学が得意ではありませんでした。

var numHours;
if(time_end < time_start){
    numHours = parseInt(t_e.substring(0,2)) - parseInt(t_s.substring(0,2)) + 24;
}else{
    numHours = parseInt(t_e.substring(0,2)) - parseInt(t_s.substring(0,2));
}

これを行うにはおそらく (間違いなく) より良い方法がありますが、どうすればこれを機能させることができますか。また、より正確な時差を得るために、分も計算できますか。

4

3 に答える 3

0

私は初心者で、おそらく 2 行ほどで答えを導き出す専門家もいるでしょう :) が、ここでは ..... これでうまくいきます。入力は「1:20pm-2:30am」の形式の文字列です。

function CountingMinutesI(str) { 
split = str.split('-')
startTime = split[0]
endTime = split[1]

// for end time
   if (endTime === '12:00am')  { endInMinutes = 0}
   else if (endTime.charAt(endTime.length-2) === 'a') {
     if (endTime.substr(0, 2) === '12') { 
       endInMinutes = parseInt(endTime.split(':')[1].replace(/[a-z]/gi, ''))
     }
     else {
     endHours = endTime.split(':')[0]
     endMins = endTime.split(':')[1].replace(/[a-z]/gi, '')
     endInMinutes = (parseInt(endHours)*60) + parseInt(endMins)
     }
   }

   else if (endTime === '12:00pm') {endInMinutes = 720}

   else {
     endHours = endTime.split(':')[0]
     endMins = endTime.split(':')[1].replace(/[a-z]/gi, '')
     endInMinutes = (parseInt(endHours)*60 + 720) + parseInt(endMins)
   }  

// for start time
   if (startTime === '12:00am')  { startInMinutes = 0}

   else if (startTime.charAt(startTime.length-2) === 'a') {
      if (startTime.substr(0, 2) === '12') { 
       startInMinutes = parseInt(startTime.split(':')[1].replace(/[a-z]/gi, ''))
      }
      else {
      startHours = startTime.split(':')[0]
      startMins = startTime.split(':')[1].replace(/[a-z]/gi, '')
      startInMinutes = (parseInt(startHours)*60) + parseInt(startMins)
      }  
    }

   else if (startTime.substr(0,2) === '12') {startInMinutes = 720 + parseInt(startTime.split(':')[1].replace(/[a-z]/gi, ''))}
   else {
     startHours = startTime.split(':')[0]
     startMins = startTime.split(':')[1].replace(/[a-z]/gi, '')
     startInMinutes = (parseInt(startHours)*60 + 720) + parseInt(startMins)
   }  

   if (endInMinutes > startInMinutes) {output = endInMinutes - startInMinutes}
   else {output = 1440 - (startInMinutes - endInMinutes)}

return output
}
于 2015-03-11T06:59:09.110 に答える