Javascript 以字符串格式提供力矩时,ISO格式不推荐警告

Javascript 以字符串格式提供力矩时,ISO格式不推荐警告,javascript,node.js,datetime,momentjs,Javascript,Node.js,Datetime,Momentjs,我一直在尝试用moment来比较两个日期。在运行应用程序时,我收到以下弃用警告 const DATE_FORMAT = "YYYY-MM-DD"; const endDate = "2020-05-05T00:00:00.000Z" (dynamic value from service) const appValidDate = moment(endDate).subtract(1, "days").format(DATE_FORMAT); const currentDate = moment

我一直在尝试用moment来比较两个日期。在运行应用程序时,我收到以下弃用警告

const DATE_FORMAT = "YYYY-MM-DD";
const endDate = "2020-05-05T00:00:00.000Z" (dynamic value from service)
const appValidDate = moment(endDate).subtract(1, "days").format(DATE_FORMAT);
const currentDate = moment().startOf("day").format(DATE_FORMAT);
const validDate = moment(currentDate).isSameOrBefore(appValidDate);
找到一些有用的stackoverflow链接:

但仍然无法删除弃用警告

所以根据文档,需要使用字符串+格式,所以我这样做:

Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments:
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: Invalid date, _f: undefined, _strict: undefined, _locale: [object Object]
Error:
但问题是我们不能将endDate转换为string&然后减去天数。如果我像那样传球,就会出现瞬间失误


谁能帮我找到一个合适的解决办法。如有任何帮助,我们将不胜感激。

如上述评论所述,请使用
moment
实例进行日期比较

.format()
返回的值是一个字符串,根据选择的格式(可能还有您的区域设置)可能会触发您看到的警告

要显示值时,请使用
.format()

const DATE\u FORMAT=“YYYY-MM-DD”;
const endDate=“2020-05-05T00:00:00.000Z”//(服务的动态值)
常数appValidDate=时刻(结束日期)。减去(1,“天”);
const currentDate=moment().startOf(“日”);
//或UTC“一天的开始”
//const currentDate=moment.utc().startOf('day')
const validDate=currentDate.isSameOrBefore(appValidDate);
console.log('appValidDate:',appValidDate.format(日期\格式))
console.log('currentDate:',currentDate.format(日期格式))
console.log('validDate:',validDate)

您有
时刻(当前日期)
。查看分配给
currentDate
的值。我只想删除对
.format(DATE\u format)
的两个调用,因为您没有显示这些日期,最好将它们保留为
时刻
instances@Phil是的,我正在代码中显示appValidDate。要求类似于上述格式的endDate(芬兰日期)。比较这些值并以YYY-MM-DD格式显示如何将currentDate转换为endDate?在显示时格式化,而不是之前。在进行日期算术时,直接使用
时刻
instances@Phil问题是如何将currentDate转换为endDate格式?endDate是芬兰日期。如果您提供的字符串不是公认的格式之一,那么moment.js会退回到内置解析器,这是出了名的不可靠。格式为“YYYY-MM-DD”的日期将被解析为UTC,但其他方法将作为本地方法使用,因此startOf(“日”)将是本地日的开始,可能与UTC日的开始不一致。如果在2020-05-06在与UTC负偏移的地方运行,这将返回
appValidDate:2020-05-03
currentDate:2020-05-06
。我认为OP预计将分别看到2020-05-04和2020-05-06。@RobG需要OP对此做出澄清。他们将UTC字符串构造的日期与本地“一天的开始”进行比较。我将添加UTC版本作为一个选项
const DATE_FORMAT = "YYYY-MM-DD";
const endDate = "2020-05-05T00:00:00.000Z" (dynamic value from service)
const appValidDate = moment(endDate).subtract(1, "days").format(DATE_FORMAT);
const currentDate = moment().startOf("day").format(DATE_FORMAT);
const validDate = moment(currentDate, DATE_FORMAT).isSameOrBefore(appValidDate);