时刻 js 日期时间比较

2022-08-29 23:06:18

我正在使用 moment.js 来格式化我的日期时间,在这里我有两个日期值,并且当一个日期大于另一个日期时,我想实现一个特定的功能。我阅读了他们的大部分文档,但没有找到实现这一目标的功能。我知道它会在那里。

这是我的代码:

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

在这里,我比较了两个日期,即,期望第一个日期大于第二个日期,但它总是转到其他条件。我不知道为什么?2014-03-24T01:15:000 > 2014-03-24T01:14:000


答案 1

我相信您正在寻找查询函数、 、 和 。isBeforeisSameisAfter

但是要确切地说出你正在尝试什么有点困难。也许您只是想了解输入时间和当前时间之间的差异?如果是这样,请考虑差分函数 。例如: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').tzAmerica/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');

答案 2

您应该能够直接比较它们。

var date = moment("2013-03-24")
var now = moment();

if (now > date) {
   // date is past
} else {
   // date is future
}

$(document).ready(function() {
  
  $('.compare').click(function(e) {
  
    var date = $('#date').val();
  
    var now = moment();
    var then = moment(date);
  
    if (now > then) {
      $('.result').text('Date is past');
    } else {
      $('.result').text('Date is future');
    }

  });

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.3/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>



<input type="text" name="date" id="date" value="2014-12-18"  placeholder="yyyy-mm-dd">
<button class="compare">Compare date to current date</button>
<br>
<div class="result"></div>