2016-09-14 18 views
0

私は、不正確な値を入力することによるTime In/Outを防ぐ簡単な検証があります。そこで、ユーザは、例えば選択した場合:新しい日付()12/24時間形式JavaScript?

12:30 PM = Time In

12:15 PM = Time Out彼らは、画面'Time Out can not be less or equal than Time In'にメッセージが表示されます。

私の検証はうまく機能しますが、1つのケースで正しく動作します。例えば、ユーザピックの場合:

Time In: 12:30 PM

Time Out: 1:00 PM彼らは保存して、警告メッセージのポップアップをクリックします。

Time In: Thu Sep 15 2016 00:29:00 GMT-0500 (Central Standard Time)Time Out: Wed Sep 14 2016 13:29:00 GMT-0500 (Central Standard Time) 

JavaScriptを使用してTime InとTime Outの新しい値を作成しました。私のコードはnew Date()に12 PM時間00を設定しているようです。だから私の質問は、それを防ぐ方法ですまたはこの問題を解決するためにJavaScriptの他の方法があります。

var timeIn = document.getElementById('timeIn').value; 
var timeOut = document.getElementById('timeOut').value; 
var today = new Date(), 
    curYear = today.getFullYear(), 
    curDate = today.getDate(), 
    curMonth = today.getMonth(), 

    defaultTimeIn = timeIn.split(":"), 
    defaultTimeOut = timeOut.split(":"), 

    defaultHourIn = parseInt(defaultTimeIn[0], 10), 
    defaultHourOut = parseInt(defaultTimeOut[0], 10), 

    defaultMinAMPMIn = defaultTimeIn[1].split(" "), 
    defaultMinAMPMOut = defaultTimeOut[1].split(" "), 

    defaultMinIn = defaultMinAMPMIn[0], 
    defaultMinOut = defaultMinAMPMOut[0], 

    defaultAMPMIn = defaultMinAMPMIn[1], 
    defaultAMPMOut = defaultMinAMPMOut[1]; 

if (defaultAMPMIn == "PM") { 
    defaultHourIn += 12; //hours are in 24-hour format (0-23) 
} 

if (defaultAMPMOut == "PM") { 
    defaultHourOut += 12; //hours are in 24-hour format (0-23) 
} 

var compTimeIn = new Date(curYear, curMonth, curDate, defaultHourIn, defaultMinIn); 
var compTimeOut = new Date(curYear, curMonth, curDate, defaultHourOut, defaultMinOut); 

if (compTimeIn >= compTimeOut) { 
    alert("'Time Out' can't be less or equal to 'Time In'"); 
} 
+0

この作品は、異なるロケールで正しくでしょうか? – ppeterka

+0

@ppeterkaわかりません。 –

+3

http://momentjs.com/をご覧ください。おそらく、javascriptの日付/時刻を操作するための最良のライブラリです。あなたはそれで多くの面倒を節約します。 – Paulooze

答えて

1

ちょうどからあなたの状態を変更します:ここで私は、新しいDate()への変換に2つの入力された値を取っている私のコードです

defaultAMPMOut/In == "PM"

defaultAMPMOut/In == "PM" && defaultHourOut/In != 11 //or 12 depending on if it starts at 0 or 1

何が起こっているのは、それが12であれば、それが0でないときに12を追加します。

EDIT:

それは12AMだ場合、あなたはまた、それが0

if (defaultAMPMIn == "PM" && defaultHourIn != 12) { 
    defaultHourIn += 12; //hours are in 24-hour format (0-23) 
} 

if (defaultAMPMOut == "PM" && defaultHourOut != 12) { 
    defaultHourOut += 12; //hours are in 24-hour format (0-23) 
} 

if (defaultAMPMOut == "AM" && defaultHourOut == 12) { 
    defaultHourOut -= 12; //hours are in 24-hour format (0-23) 
} 

if (defaultAMPMIn == "AM" && defaultHourIn == 12) { 
    defaultHourIn -= 12; //hours are in 24-hour format (0-23) 
} 
+0

私は上記のコードをテストしてくれています。時間の矛盾で他のエラーが発生しないようにするかどうかは分かりません。 24時間も決して襲われないように見えます。私が12AMを選ぶと12時間表示されます。 –

+0

AMと書かれている場合は12、それが0か1になるようにチェックしてください –

+0

私の中では(defaultAMPMOut/In == "PM" && defaultHourOut/In!= 12)その場合は? –

-1

ですので、12時間を減算する必要があり、これを試してみてください。

シンプルな何かをすると、再利用可能な機能にのようなもの、これを変換しないのはなぜ
// Your Code 
    if (defaultAMPMIn == "PM" && defaultHourIn >12) { 
       defaultHourIn += 12;//hours are in 24-hour format (0-23) 
      } 

      if (defaultAMPMOut == "PM" && defaultHourOut >12) { 
       defaultHourOut += 12;//hours are in 24-hour format (0-23) 
      } 
    //Your Code 
+0

私はこれを試してくれて、私にとってはうまくいきませんでした。 –

1

:24時間制、時間+期間への変換

var time = document.getElementById('timeIn').value; 
var hours = Number(time.match(/^(\d+)/)[1]); 
var minutes = Number(time.match(/:(\d+)/)[1]); 
var AMPM = time.match(/\s(.*)$/)[1]; 
if(AMPM == "PM" && hours<12) hours = hours+12; 
if(AMPM == "AM" && hours==12) hours = hours-12; 
var sHours = hours.toString(); 
var sMinutes = minutes.toString(); 
if(hours<10) sHours = "0" + sHours; 
if(minutes<10) sMinutes = "0" + sMinutes; 
alert(sHours + ":" + sMinutes); 
+1

これは例であり、あなたのためのコードをガイドするのではなく、意味するものです。 – zerohero

2

12時間制を。

function to24Hour(hour, period) { 
 
    if (period === 'AM' && hour === 12) { 
 
    hour -= 12; 
 
    } else if (period === 'PM' && hour < 12) { 
 
    hour += 12; 
 
    } 
 
    return hour; 
 
} 
 
const hours12 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; 
 
const hours24 = []; 
 
for (let hour of hours12) { 
 
    hours24.push(to24Hour(hour, 'AM')); 
 
    hours24.push(to24Hour(hour, 'PM')); 
 
} 
 
console.log(hours24);

関連する問題