javascript - 为什么我无法将日期与 moment js 进行比较?

标签 javascript jquery momentjs

我的 JavaScript 代码是这样的:

let requestDate = sendDate + ' ' + sendTime + ':00'
requestDate = moment(requestDate, "DD-MM-YYYY HH:mm")
let currentDate = moment().add(3, 'h').format("DD-MM-YYYY HH:mm")

console.log(requestDate)
console.log(currentDate)
console.log('test')
if( requestDate <= currentDate){
    console.log('1')
}
else {
    console.log('2');
}

在控制台上看起来像这样:

enter image description here

为什么console.log的结果显示为2?

从我的代码来看,它应该是 console.log 显示 1 的结果

最佳答案

您正在将 moment 对象(即:requestDate)与字符串(即:currentDate)进行比较。

您可以在以下代码片段中看到这一点:

let requestDate = '07-09-2017' + ' ' + '12' + ':00'
requestDate = moment(requestDate, "DD-MM-YYYY HH:mm")
let currentDate = moment().add(3, 'h').format("DD-MM-YYYY HH:mm")

console.log('requestDate is: ' + typeof(requestDate) + ' its    AND the value is: ' + requestDate.format("DD-MM-YYYY HH:mm"))
console.log('currentDate is: ' + typeof(currentDate) + ' its    AND the value is: ' + currentDate)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

您有两个选择。

第一个选项

比较字符串日期。在这种情况下,您可以使用 Query functions 。根据您的情况,您可以使用:isSameOrAfter。

因此,您可以更改此行:

if( requestDate <= currentDate){

至:

if( moment(currentDate, "DD-MM-YYYY HH:mm").isSameOrAfter(moment(requestDate, "DD-MM-YYYY HH:mm"))) {

let requestDate = moment();
requestDate = moment(requestDate, "DD-MM-YYYY HH:mm").format("DD-MM-YYYY HH:mm");
let currentDate = moment().add(3, 'h').format("DD-MM-YYYY HH:mm")

console.log(requestDate)
console.log(currentDate)
console.log('test')
if( moment(currentDate, "DD-MM-YYYY HH:mm").isSameOrAfter(moment(requestDate, "DD-MM-YYYY HH:mm"))) {
    console.log('1')
}
else {
    console.log('2');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

第二个选项是比较矩对象,并仅在需要打印值时使用.format("DD-MM-YYYY HH:mm")

let requestDate = moment();
requestDate = moment(requestDate, "DD-MM-YYYY HH:mm")
let currentDate = moment().add(3, 'h');

console.log(requestDate.format("DD-MM-YYYY HH:mm"))
console.log(currentDate.format("DD-MM-YYYY HH:mm"))
console.log('test')
if( requestDate <= currentDate){
    console.log('1')
}
else {
    console.log('2');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

关于javascript - 为什么我无法将日期与 moment js 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46095367/

相关文章:

javascript - 删除同步图表中的工具提示,当用户离开图表区域时

javascript - 如何将列表显示为表格?

vue.js - TypeError : _vm. 时刻不是Vuejs中的函数

javascript - 使用 JavaScripty、Moment.js 等从字符串中去除时区?

javascript - 如何使用打开 vue-js 模式的可点击组件在 vue-js 中创建 TreeView ?

javascript - 为什么 Chartkick 中的 line_chart 必须在日期数据上显示时间?

javascript - 如何优化服务和加载 JavaScript 文件?

javascript - $.Deferred() 和 $.ajax() 在 Node.JS 中不起作用

javascript - 如何进行模态转换?

javascript - 如何将日期范围拆分为时间间隔?