Moment js 日付時刻比較 質問する

Moment js 日付時刻比較 質問する

私は日付時刻をフォーマットするために 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 条件に進みます。なぜかわかりません。

ベストアンサー1

あなたが探しているのはクエリ関数isBeforeisSame、 そしてisAfter

しかし、あなたが何をしようとしているのかを正確に知ることは少し難しいです。おそらく、入力時間と現在の時間の差を取得したいだけなのでしょうか?もしそうなら、差分関数diff。 例えば:

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

他にもいくつかあります:

  • 最初の行にエラーがあります:

      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');

おすすめ記事