时刻js日期时间比较

我使用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,期望第一个日期大于第二个日期,但它总是进入else条件。我不知道为什么?

929733 次浏览

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

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>

我相信你正在寻找查询功能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').tz属于moment-timezone。你不需要使用它,除非你使用其他时区,比如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');

Jsfiddle: http://jsfiddle.net/guhokemk/1/

 function compare(dateTimeA, dateTimeB) {
var momentA = moment(dateTimeA,"DD/MM/YYYY");
var momentB = moment(dateTimeB,"DD/MM/YYYY");
if (momentA > momentB) return 1;
else if (momentA < momentB) return -1;
else return 0;
}


alert(compare("11/07/2015", "10/07/2015"));

如果dateTimeA大于dateTimeB,该方法返回1

如果dateTimeA等于dateTimeB,则该方法返回0

如果dateTimeA小于dateTimeB,该方法返回-1

将日期传递到这样的时刻,它将进行比较并给出结果。 如果你不想格式化,删除

moment(Date1).format("YYYY-MM-DD") > moment(Date2).format("YYYY-MM-DD")
moment(d).isAfter(ahead30now); // true

http://momentjs.com/docs/#/query/is-after/

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


}

当使用任何< >强momentjs查询< / >强: isBeforeisAfterisSameOrBeforeisAfter0, isAfter1时,你的datetime在正确的ISO格式中是很重要的

所以你的日期时间应该是:

2014 - 03 - 24 - t01:14:002014 - 03 - 24 - t01:14:00.000z

否则,您可能会收到以下弃用警告,条件将计算为false:

弃用警告:所提供的值不在可识别的RFC2822或 ISO格式。moment构造返回到js Date(),这不是 适用于所有浏览器和版本。非RFC2822/ISO日期 格式是不鼓励的,并将在即将到来的主要删除 释放。详情请参阅

. http://momentjs.com/guides/#/warnings/js-date/获取更多信息

// https://momentjs.com/docs/#/query/


const dateIsAfter = moment('2014-03-24T01:15:00.000Z').isAfter(moment('2014-03-24T01:14:00.000Z'));


const dateIsSame = moment('2014-03-24T01:15:00.000Z').isSame(moment('2014-03-24T01:14:00.000Z'));


const dateIsBefore = moment('2014-03-24T01:15:00.000Z').isBefore(moment('2014-03-24T01:14:00.000Z'));


console.log(`Date is After: ${dateIsAfter}`);
console.log(`Date is Same: ${dateIsSame}`);
console.log(`Date is Before: ${dateIsBefore}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js"
></script>

var startDate = moment(startDateVal, "DD.MM.YYYY");//Date format
var endDate = moment(endDateVal, "DD.MM.YYYY");


var isAfter = moment(startDate).isAfter(endDate);


if (isAfter) {
window.showErrorMessage("Error Message");
$(elements.endDate).focus();
return false;
}

对于日期-时间比较,你可以使用moment的valueOf函数,它提供日期-时间的毫秒数,最适合进行比较:

const date1 = moment('01-02-2020', 'DD-MM-YYYY').valueOf()
const date2 = moment('11-11-2012', 'DD-MM-YYYY').valueOf()


// console.log((date1 > date2 ? 'date1' : 'date2') + " is greater..."  )


if (date1 > date2) {
console.log("date1 is greater...")
} else {
console.log("date2 is greater...")
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

说,如果你想在日期选择器中禁用过去的日期,下面的代码肯定会帮助你 disabledDate ={(当前)=比;{ 回报( 当前,, current.format(“YYYY-MM-DD") & lt; 时刻().format(“YYYY-MM-DD") ); }} < / p >