moment.js:弃用警告:提供的值不是公认的RFC2822或ISO格式

问题描述 投票:0回答:1

我从外部来源获取日期作为输入,它是一个字符串,

const a = '08-01-2019';

对我来说,必填格式为'MM-DD-YYYY',

const outputDateFormat = 'MM-DD-YYYY';

而且我正在使用moment.js并在该日期执行以下操作,例如增加一年和减少一天,

//adding a year 

const a = moment(a).add(1, 'years').add(-1, 'days').format(outputDateFormat);

对于上述行,我得到了,

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.

我的意思是,使用矩将其转换为我的输出所需格式会发出已过时的警告。

const finalDate = moment(a).format(outputDateFormat); - Resulting depricated warning

因此,我尝试如下使用新的Date()以避免出现警告。

//adding a year - approach #1

    const a = moment(new Date(a)).add(1, 'years').add(-1, 'days').format(outputDateFormat);

这不会返回任何错误,但我不考虑采用这种新的Date()方法,因为我的代码应可跨时区和区域设置工作。如果我们使用新的Date()代码,可能无法在时区和区域设置之间正常工作?有人可以建议吗?

所以,我遵循了这种方法#2,

//adding a year - approach #2

    const a = moment('2019-01-08').add(1, 'years').add(-1, 'days').format(outputDateFormat);

我以“ YYYY-MM-DD”的形式给出日期格式,而不是我输入的日期格式“ MM-DD-YYYY”。

这也是,不返回任何警告,代码工作正常。这样可以在时区和地区使用吗?

有人可以建议我使用方法#1或#2使我的代码在时区/区域间正常工作而没有任何错误/ momentjs警告吗?

我需要在此处使用moment.utc来使代码跨时区工作吗?我认为不需要UTC,因为我没有任何与时间相关的验证。

我的意思是我不需要moment.utc(),因为我没有时间成分,请提出建议。

moment.utc('2019-01-08').add(1, 'years').add(-1, 'days').format(outputDateFormat)

否则任何人都可以提出一种比此更好的方法来使代码在时区和语言环境中正常工作而没有任何问题?

javascript node.js date timezone momentjs
1个回答
0
投票

构造新矩对象时需要指定输入格式

const moment = require('moment')

const a = '08-01-2019';
const outputDateFormat = 'MM-DD-YYYY';

const b = moment(a, 'MM-DD-YYYY').add(1, 'years').add(-1, 'days').format(outputDateFormat);
console.log(b);
© www.soinside.com 2019 - 2024. All rights reserved.