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

下面是警告错误:

Deprecation warning: value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non 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: true, _useUTC: true, _l: undefined, _i: 2016-9-26 19:30, _f: undefined, _strict: undefined, _locale: [object Object]

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);
});

当前回答

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

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

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

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

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

即时刻(“js日期”,“js日期格式”);

eg:

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

(但你只能使用这种方法直到它贬值,这可能从未来的某一刻开始贬值)

其他回答

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

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

字符串+格式

警告:浏览器对解析字符串的支持不一致。因为没有关于应该支持哪些格式的规范,所以在某些浏览器中有效的内容在其他浏览器中并不适用。 为了在解析除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");

EDIT

//...
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将日期值转换为我想要的格式。 数据库中的日期值为

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

我所做的如下:

dateNeeded = moment(dateNeeded , moment.ISO_8601).format('YYYY-MM-DD');

参考资料如下: https://momentjs.com/docs/#/parsing/string-format/

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

moment(date, moment.ISO_8601)

谢谢你!

你可以使用

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

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

像这样在函数中使用矩

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