私は Moment.js で遊んでいて、問題に遭遇しました。私は、与えられた日付が過去か未来かを特定しようとしてきました。日付は nixタイムスタンプ として保存されます。したがって、将来の日付を現在の日付と比較する場合、問題なく機能しますが、過去の日付に対してトリガーされません。サンプルコードは以下のとおりです フィドルはここにあります 。
var pastUnixTime = '1348812970'; //some time in the past
var futureUnixTime = '1352350231';
if (moment.unix(futureUnixTime).format('DD MM YYYY') > moment().format('DD MM YYYY')) {
console.log('yay');
}
if (moment.unix(pastUnixTime).format('DD MM YYYY') < moment().format('DD MM YYYY')) {
console.log('yay 2');
}
上記のコードはyay
をログに記録します。yay 2
ではありません。なぜそれがyay 2
をログに記録しないのか誰かが私に説明できますか?
これには実際に.format()
を使用する必要はありません。
まず、タイムスタンプは文字列ではなく数字である必要があります(例、_var pastUnixTime = 1348812970;
_)。次に、タイムスタンプを直接比較できます。
_> pastUnixTime = 1348812970;
> pastUnixTime < moment().unix()
true
> pastUnixTime > moment().unix()
false
_
さて、あなたのコードが失敗する理由は、_DD MM YYYY
_文字列を比較するとき、それらが辞書式に比較されているからです…そして日は最初です!したがって、文字列_"01 01 2000"
_は常に_"31 12 1900"
_より「小さい」ことになります。 wantedで文字列を比較する場合は、_YYYY MM DD
_形式を使用できます。そうすれば、_"2000 01 01"
_は_"1900 12 31"
_よりも正しく「大きく」なります。しかし、そうする理由はありません。タイムスタンプの方がはるかに簡単です。
最後に、注意:実際には.unix()
を使用する必要はありません-moment()
のインスタンスは賢明に比較されます。
_> past = moment().subtract("days", 1)
> now = moment()
> past < now
true
> past > now
false
_