web-dev-qa-db-ja.com

Moment JSと2回比較する

12時間形式で2回取得して比較する必要がある問題があります。プロジェクトにmoment.jsが含まれており、当初は次のように簡単だと考えていました。

var beginningTime = moment('8:45am');
var endTime = moment('9:00am');
console.log(beginningTime.isBefore(endTime)); //false???

フィドル:http://jsfiddle.net/KyleMuir/M4R4z/

不足しているものはありますか?これは難しい問題ではないように感じます。 beginningTimeまたはendTimeでモーメント関数を実行すると、単にNANと表示されます

35
Kyle Muir

常にh:mma形式で時間を処理している場合、解析時に指定できます...

var beginningTime = moment('8:45am', 'h:mma');
var endTime = moment('9:00am', 'h:mma');
console.log(beginningTime.isBefore(endTime)); // true
console.log(beginningTime.toDate()); // Mon May 12 2014 08:45:00
console.log(endTime.toDate()); // Mon May 12 2014 09:00:00
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>

今日を日付として使用するため、異なる日にまたがっている場合は機能しません。

JSFiddle

68
Anthony Chu

8:45amおよび9:00amは無効な日付です

var beginningTime = moment('8:45am');
var endTime = moment('9:00am');
console.log(beginningTime.isValid(), endTime.isValid()) // FALSE

有効な形式を使用する必要があります: http://momentjs.com/docs/#/parsing/string/

そして、彼らは一貫した結果を得るために、 http://momentjs.com/docs/#/parsing/string-format/ を使用することを提案します

例えば。

moment("2010-10-20 4:30", "YYYY-MM-DD HH:mm"); // parsed as 4:30 local time
4
Amy

ドキュメントによると、モーメント変数は、許可されている形式を誤ってチェックすると宣言しています

http://momentjs.com/docs/#/parsing/string/

代わりに使用できます

var beginningTime = moment({
  h: 8,
  s: 45
});
var endTime = moment({
  h: 9,
  s: 0
});
console.log(beginningTime.isBefore(endTime)); //true
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
2
Mudaser Ali

コンソールを開いて、これを手動で実行してみてください:moment( "8:45 am")。toDate()

無効な日付が表示されるため、期待どおりの結果が得られません。一方、「2014-05-15 08:45」は日付を示します。

1
Damon Smith