1. ホーム
  2. javascript

[解決済み] モーメント js 日付時刻比較

2022-03-19 04:33:01

質問

私はmoment.jsを使って日付の時刻をフォーマットしていますが、ここに2つの日付値があり、一方の日付が他方より大きいときに特定の機能を実現したいのです。私は彼らのドキュメントのほとんどを読みましたが、これを達成するための関数は見つかりませんでした。私はそれがそこにあることを知っています。

これは私のコードです。

var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
var d = moment(date_time).tz('UTC'); // first date 

var now = new Date(),
    dnow = moment(now).tz('UTC'),
    snow = dnow.minute() % 15,
    diffnow = 15 - snow,
    tonow = moment(dnow).add('minute', diffnow),
    ahead30now = moment(tonow).add('minute', 30);

if (d > ahead30now) {
    // allow input time
    console.log('UTC TIME DB', d.format());
} else {

}

編集

var date_time = req.body.date + 'T' + req.body.time + req.body.timezone; // 2014-03-24T01:15:000
var utc_input_time = moment(date_time).utc(); // 2014-03-24T01:15:000
console.log('utc converted date_time', moment(date_time).utc().format("YYYY-MM-DDTHH:mm:SSS"));
var isafter = moment(utc_input_time).isAfter(moment('2014-03-24T01:14:000')); // true
if(isafter === true){
    console.log('is after true');
} else {
    console.log('is after is false');
}

ここでは、2つの日付を比較しています。 2014-03-24T01:15:000 > 2014-03-24T01:14:000 最初のものが2番目のものよりも大きいことを期待していますが、常にelse条件になっています。なぜでしょうか?

どのように解決するのですか?

を探しているのだと思います。 クエリ機能 , isBefore , isSame および isAfter .

しかし、あなたが何をしようとしているのか、正確に伝えるのは少し難しいです。 おそらく、入力時刻と現在時刻の差を取得したいだけなのでは? もしそうなら、次のようなものを考えてみてください。 差分機能 , diff . 例えば

moment().diff(date_time, 'minutes')

その他、いくつか。

  • 1行目にエラーがあります。

      var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
    
    

    それじゃダメなんだ。 という意味でしょう。

      var date_time = '2013-03-24' + 'T' + '10:15:20:12' + 'Z';
    
    

    もちろん、あなたもそうかもしれません。

      var date_time = '2013-03-24T10:15:20:12Z';
    
    
  • 使っているんですね。 .tz('UTC') を正しくない。 .tz に属しています。 モーメントタイムゾーン . のように、他のタイムゾーンを扱うのでなければ、これを使う必要はないでしょう。 America/Los_Angeles .

    値をUTCとしてパースしたい場合は、以下を使用します。

      moment.utc(theStringToParse)
    
    

    あるいは、ローカル値をパースして 変換 を使用して、UTCに変換します。

      moment(theStringToParse).utc()
    
    

    あるいは、まったく必要ないのかもしれません。 入力値がUTCだからといって、関数全体がUTCで動作する必要はないのです。

  • でインスタンスを取得しているようです。 moment(new Date()) . 代わりに moment() .

更新情報

編集内容からすると、これだけでいいと思うのですが。

var date_time = req.body.date + 'T' + req.body.time + 'Z';
var isafter = moment(date_time).isAfter('2014-03-24T01:14:00Z');

または、フィールドが正しい形式であることを確認したい場合。

var m = moment.utc(req.body.date + ' ' + req.body.time, "YYYY-MM-DD  HH:mm:ss");
var isvalid = m.isValid();
var isafter = m.isAfter('2014-03-24T01:14:00Z');