Moment.js中的弃用警告-不是公认的ISO格式

我得到一个警告,提供给moment的值不是公认的ISO格式。今天我用矩函数改变了变量,但它仍然不起作用。

下面是警告错误:

弃用警告:所提供的值不是公认的ISO格式。moment构造回到js Date(),它在所有浏览器和版本上都不可靠。不鼓励使用非ISO日期格式,并将在即将发布的主要版本中删除。更多信息请参考http://momentjs.com/guides/#/warnings/js-date/。 参数: [0] _isAMomentObject: true, _isUTC: true, _useUTC: true, _l: undefined, _i: 2016-9-26 19:30, _f: undefined, _strict: undefined, _locale: [object object]

. > . [0] _isAMomentObject: true, _isUTC: true, _useUTC: true, _l: undefined, _i: 2016-9-26 19:30, _f: undefined, _strict: undefined, _locale: [object object]

. [0]
var entryDate = new Date();
var currentDate = entryDate.getDate();


function between(x, min, max) {
return x.valueOf() >= min.valueOf() && x < max.valueOf();
}


$('#custom1').change(function () {
if ($('#custom1 :selected').val() == 'AU') {
var keyword = '';


var aus1_s = moment.tz('2016-9-26 19:30', 'Australia/Sydney');
var aus2_s = moment.tz('2016-10-2 19:30', 'Australia/Sydney');
var aus3_s = moment.tz('2016-10-9 19:30', 'Australia/Sydney');
var aus4_s = moment.tz('2016-10-16 19:30', 'Australia/Sydney');
var aus5_s = moment.tz('2016-10-23 19:30', 'Australia/Sydney');
var aus6_s = moment.tz('2016-10-30 19:30', 'Australia/Sydney');
var aus6_e = moment.tz('2016-11-5 19:30', 'Australia/Sydney');
} else if ($('#custom1 :selected').val() == 'NZ') {
var aus1_s = moment.tz('2016-9-28 20:30', 'Pacific/Auckland');
var aus2_s = moment.tz('2016-10-4 20:30', 'Pacific/Auckland');
var aus3_s = moment.tz('2016-10-11 20:30', 'Pacific/Auckland');
var aus4_s = moment.tz('2016-10-18 20:30', 'Pacific/Auckland');
var aus5_s = moment.tz('2016-10-25 20:30', 'Pacific/Auckland');
var aus6_s = moment.tz('2016-11-2 20:30', 'Pacific/Auckland');
var aus6_e = moment.tz('2016-11-9 20:30', 'Pacific/Auckland');
} else {
$('#entryEquals').val('');
return false;
}


var today = moment();


switch (true) {
case between(today, aus1_s, aus2_s):
keyword = 'RElYT04=';
break;


case between(today, aus2_s, aus3_s):
keyword = 'QlJJREU=';
break;


case between(today, aus3_s, aus4_s):
keyword = 'U1lETkVZ';
break;


case between(today, aus4_s, aus5_s):
keyword = 'R1JPT00=';
break;


case between(today, aus5_s, aus6_s):
keyword = 'V0VERElORw==';
break;


case between(today, aus6_s, aus6_e):
keyword = 'VExD';
break;


default:
$('#entryEquals').val('');
break;
}


$('#entryEquals').val(keyword);
});
304403 次浏览

看看他们所有令人敬畏的文档吧!

这里是他们讨论警告消息的地方。

字符串+格式

警告:浏览器对解析字符串的支持不一致。因为没有关于应该支持哪些格式的规范,所以在某些浏览器中有效的内容在其他浏览器中并不适用。

为了解析除ISO 8601字符串以外的任何字符串的一致结果,您应该使用字符串+格式

moment("12-25-1995", "MM-DD-YYYY");

字符串+格式(多种格式)

如果你有不止一种格式,检查他们的字符串+格式(带's')。

如果您不知道输入字符串的确切格式,但知道它可能是许多格式中的一种,则可以使用格式数组。

moment("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);

请查看文档以了解更具体的内容。

时区

签出分区解析,时区的等效文档。

这一时刻。Tz构造函数接受与moment构造函数相同的所有参数,但使用最后一个参数作为时区标识符。

var b = moment.tz("May 12th 2014 8PM", "MMM Do YYYY hA", "America/Toronto");

编辑

//...
var dateFormat = "YYYY-M-D H:m"; //<-------- This part will get rid of the warning.
var aus1_s, aus2_s, aus3_s, aus4_s, aus5_s, aus6_s, aus6_e;
if ($("#custom1 :selected").val() == "AU" ) {
var region = 'Australia/Sydney';


aus1_s = moment.tz('2016-9-26 19:30', dateFormat, region);
aus2_s = moment.tz('2016-10-2 19:30', dateFormat, region);
aus3_s = moment.tz('2016-10-9 19:30', dateFormat, region);
aus4_s = moment.tz('2016-10-16 19:30', dateFormat, region);
aus5_s = moment.tz('2016-10-23 19:30', dateFormat, region);
aus6_s = moment.tz('2016-10-30 19:30', dateFormat, region);
aus6_e = moment.tz('2016-11-5 19:30', dateFormat, region);
} else if ($("#custom1 :selected").val() == "NZ" ) {
var region = 'Pacific/Auckland';


aus1_s =  moment.tz('2016-9-28 20:30', dateFormat, region);
aus2_s =  moment.tz('2016-10-4 20:30', dateFormat, region);
aus3_s =  moment.tz('2016-10-11 20:30', dateFormat, region);
aus4_s =  moment.tz('2016-10-18 20:30', dateFormat, region);
aus5_s =  moment.tz('2016-10-25 20:30', dateFormat, region);
aus6_s =  moment.tz('2016-11-2 20:30', dateFormat, region);
aus6_e =  moment.tz('2016-11-9 20:30', dateFormat, region);
}
//...

这个答案是为了更好地理解这个警告

当使用moment创建时间对象var today = moment();时,会产生弃用警告。

如果这个警告对你来说是好的,那么我有一个更简单的方法。

不要使用js中的date对象,而是使用moment。例如,使用moment()来获取当前日期。

或者将js date对象转换为moment date。你可以简单地指定你的js日期对象的格式。

也就是说,moment("js date", "js date format");

例如:

moment("2014 04 25", "YYYY MM DD");

(但是你只能使用这个方法直到它被折旧,这可能在将来从moment开始折旧)

我遇到这个错误,因为我试图从localStorage传递一个日期。将日期传递给一个新的Date对象,然后调用.toISOString ()为我完成了这个任务:

const dateFromStorage = localStorage.getItem('someDate');
const date = new Date(dateFromStorage);
const momentDate = moment(date.toISOString());

这将抑制控制台中任何警告。

这样做对我很有用:

moment(new Date("27/04/2016")).format

像这样在函数中使用矩

let date = "01/11/1992"  // string
moment(new Date(date)).format('MM/DD/YYYY')

使用moment.js解析字符串。

const date = '1231231231231' //Example String date
const parsed = moment(+date);

你可以使用

moment(date,"currentFormat").format("requiredFormat");

当date不是ISO格式时,这应该被使用,因为它会告诉moment我们当前的格式是什么。

在代码中添加以下行来抑制警告:

const moment = require('moment');

moment.suppressDeprecationWarnings = true;

我也遇到过类似的问题,用以下方法解决: 我的日期格式是:' 2020年12月11日星期五05:00:00 GMT+0500(巴基斯坦标准时间)'

let currentDate = moment(new Date('Fri Dec 11 2020 05:00:00 GMT+0500 (Pakistan Standard Time)').format('DD-MM-YYYY'); // 'Fri Dec 11 2020 05:00:00 GMT+0500 (Pakistan Standard Time)'


let output=(moment(currentDate).isSameOrAfter('07-12-2020'));
const dateFormat = 'MM-DD-YYYY';


const currentDateStringType = moment(new Date()).format(dateFormat);
    

const currentDate = moment(new Date() ,dateFormat);  // use this

的时刻。suppressDeprecationWarnings = true;

一个简单的答案:

let date = Date.now();
let timeNow = moment(new Date(date)).format('YYYY-MM-DD');

我正在使用moment将日期值转换为我想要的格式。 数据库中的date值类似于

2021 - 06 - 07 - t22:00:00.000z

我所做的如下:

dateNeeded = moment(dateNeeded , moment.ISO_8601).format('YYYY-MM-DD');
参考如下: https://momentjs.com/docs/#/parsing/string-format/ < / p >

在我的例子中,这个错误发生在

moment('2021-07-1')

正确的方法是

moment('2021-07-01')

当月份/日期小于10时,需要在前面添加0

这可能有点迟了。我的问题是我没有从数据库传递的格式(我的是NULL)。

文档说:This deprecation warning is thrown when no known format is found for a date passed into the string constructor. To work around this issue, specify a format for the string being passed to moment().

 var nowTime = moment();


var nowTimeFormate = moment(nowTime).format("HH:mm");


console.log('from now time',nowTimeFormate)

这种语法帮助我避免警告

let m = moment(new Date(dateObjectVariable));

我采用了与其他评分答案相似的方法。我注意到我不需要“。格式”。此方法用于从moment(new Date(dateObjectVariable))构造函数创建一个moment对象,以便为我的函数操作它。

我得到了同样的问题,我使用下面的片段,它为我工作

moment(date, moment.ISO_8601)

谢谢你!