2017-03-15 7 views
1

現在の時刻(つまり午後7時30分)を取得し、開始時刻(つまり6:00)と比較するAPIを作成したいam)と終了時刻(すなわち午後8時)。時間がこれらの2つの制限の間にある場合、出力には肯定的な応答が与えられます。入力した時間が開始時刻と終了時刻の間にあるかどうかを確認する方法

これを行うための日付機能はありますか?これらの制限を比較する時間と分を確認する効果的な方法は何ですか?

+0

1)3 'Date'が2オブジェクトを取得)を使用して、それらを比較標準関係演算子 '<', '>'など? – Bergi

+0

開始日オブジェクトを新しい日付( '7:30 p.m')として初期化できますか? –

答えて

2

あなたは数に文字列の時間表現を変換し、それらを比較することができます。 これを試してください。

function timeToNumber(timeString) { 
 
    var t = timeString.split(" "); 
 

 
    var offset = 0; 
 

 
    if (t[1] == "PM") { 
 
    offset = 12; 
 
    } 
 

 
    var hm = t[0].split(":"); 
 

 
    var hours = Number(hm[0]) + offset; 
 

 
    return hours * 100 + Number(hm[1]); 
 
} 
 

 
function timeCompare(min, max, ref) { 
 
    return (timeToNumber(min) <= timeToNumber(ref)) && (timeToNumber(ref) <= timeToNumber(max)); 
 
} 
 

 
var rangeMin = "6:00 AM"; 
 
var rangeMax = "8:00 PM"; 
 
var reference = "7:30 PM" 
 

 

 

 
console.log(timeCompare(rangeMin, rangeMax, reference))

注意。これは、時間範囲の制限の間に日の変更がない場合にのみ機能します。あなたの参照をそのような範囲と比較する場合は、時間だけでなく完全な日時を使用してください。

+0

あなたはもっと適切な例を使用したいかもしれません。サファリでは、 'new Date(" 11-01-2000 ")'は無効な日付を返しますので、上記はfalseを返します。 – RobG

+0

私は元のポスターにその部分を残します。 timeCheck関数は、Dateオブジェクトが正しく提供されていればブラウザに関係なく動作します – Hasan

+0

ここでは、日付 - 年 - 年を比較したくありません。 h:mm:形式を比較したい(つまり、7:00と6:12と12:24を比較する)ので、どのようにすればよいか提案できますか? –

1

var today = new Date().getHours(); 
 
if (today >= 6 && today <= 20) { 
 
    alert('good time'); 
 
} else { 
 
    alert('bad time') 
 
}

@RobGはので、私は数分で比較する時間を変更するに述べたようにこのコードは、午前20時05のために働いていません。ありがとう@RobG。

var totalMinutes = new Date().getHours() * 60 + new Date().getMinutes(); 
 
if (totalMinutes >= 360 && totalMinutes <= 1200) { 
 
    alert('good time'); 
 
} else { 
 
    alert('bad time') 
 
}

+0

あなたのコメントのおかげで@RobG、ちょうどコードを変更しました –

1

日時操作のためのモジュールmomentがあります。あなたが2つの時間の違いを見たい場合は、ここに行く!

var moment = require('moment'); 

var startTime = moment(new Date()); 
var endTime = moment(new Date()); 

var timeDiff = endTime.diff(startTime,"ms"); //in mili-seconds 
var timeDiff = endTime.diff(startTime,"s"); //in seconds 
var timeDiff = endTime.diff(startTime,"h"); //in hour 

など多くの用途がドキュメントにあります。

1

お試しいただける方法はたくさんあります。 1つは、開始時刻と終了時刻を指定して日付を使用することです。

/* Return true if date is between startTime and endTime, otherwise false. 
 
** @param {string} startTime - in format HH:mm 
 
** @param {string} endTime - in format HH:mm 
 
** @param {Date} date - date to compare, default is now 
 
** @returns {boolean} 
 
*/ 
 
function inTime(startTime, endTime, date) { 
 
    function toMins(v) { 
 
    v = v.split(':'); 
 
    return v[0]*60 + +v[1]; 
 
    } 
 
    var now = new Date(); 
 
    startTime = new Date(+now).setHours(0, toMins(startTime), 0, 0); 
 
    endTime = new Date(+now).setHours(0, toMins(endTime), 0, 0); 
 

 
    return now >= startTime && now <= endTime; 
 
} 
 

 
console.log('Is it between 6am and 8pm? ' + inTime('6:00','20:00'));

別わずか数分を使用する日付の一部です:

/* Return true if date is between startTime and endTime, otherwise false. 
 
** @param {string} startTime - in format HH:mm 
 
** @param {string} endTime - in format HH:mm 
 
** @param {Date} date - date to compare, default is now 
 
** @returns {boolean} 
 
*/ 
 
function inTime2(startTime, endTime, date) { 
 
    function toMins(v) { 
 
    v = v.split(':'); 
 
    return v[0] * 60 + +v[1]; 
 
    } 
 
    // ms since midnight 
 
    var ms = new Date() - new Date().setHours(0,0,0,0); 
 
    return ms >= toMins(startTime)*6e4 && ms <= toMins(endTime)*6e4; 
 
} 
 

 
console.log('Is it between 6am and 8pm? ' + inTime2('6:00', '20:00'));

関連する問題