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


176

我收到警告,提示提供的值不是公认的ISO格式。我今天用矩函数更改了变量,但仍然无法正常工作。

这是警告错误:

弃用警告:提供的值不是公认的ISO格式。此刻的构建要归结到js Date(),它在所有浏览器和版本中都不可靠。不鼓励使用非ISO日期格式,并将在即将发布的主要版本中将其删除。请参阅http://momentjs.com/guides/#/warnings/js-date/了解更多信息。参数:[0] _isAMomentObject:true,_isUTC:true,_useUTC:true,_l:未定义,_i:2016-9-26 19:30,_f:未定义,_strict:未定义,_locale:[对象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);
});

1
我认为警告所指的'2016-9-26 19:30'并不是公认的ISO格式
Jaromanda X

格式有什么错误?所以我需要加0吗?
Jemai

1
您可以moment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland');根据说明进行操作 ...这将接受1或2位数的月份和天数,以及24小时格式的1或2位数的小时数
Jaromanda X 16-10-11

2
该错误是你提供的格式是无法识别的ISO格式...要么提供一个公认的ISO格式,或者提供一个字符串,“提示”,在预期的格式
Jaromanda X

好的,谢谢,我也可以添加这种格式吗?var today = moment.tz(todaystring,$。urlParam('t_zone'));
Jemai

Answers:


180

查看他们所有很棒的文档!

他们在这里讨论警告消息

字符串+格式

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

为了获得一致的解析ISO 8601字符串以外的结果的结果,应使用String + Format

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

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

如果您使用多种格式,请查看其字符串+格式(带有“ s”)。

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

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

请检查文档以了解更多具体信息。

时区

在Zone中签出解析,时区的等效文档。

moment.tz构造函数采用与矩构造函数相同的所有参数,但将最后一个参数用作时区标识符。

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

89
而不是复制和粘贴文档,请提供实际答案。
Rebs

2
这就是帮助我将格式设置为“输入”的方法-moment(“ 12-25-1995”,[“ MM-DD-YYYY”,“ YYYY-MM-DD”]);
Demodave

2
@Rebs我想我添加了很多文档,因为一般的解决方案并不直接。显然,应该为Jemai提供具体的解决方案,并且自那以后我就添加了它(谢谢!),但是前者就是为什么这里有如此多的文档。
christo8989 '18

谢谢,但是如果您只是想要一个简单的日期而没有这个繁琐的格式化框架,该怎么办,我们可以忽略此警告呢?
Webwoman '18

这对我有帮助->时刻(“ 12-25-1995”,[“ MM-DD-YYYY”,“ YYYY-MM-DD”]);
Cesar Rodriguez

50

这样做对我有用:

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

5
这是最简单的解决办法,以避免控制台污染
乔西

2
对于任何需要处理IE支持的人,我都不建议采用这种方法。结果很酥专门对IE 11
Ajm113

1
这是最简单,最准确的答案。谢谢,它帮助了我。
Tahir Afridi

15

我遇到了此错误,因为我试图传递的日期是localStorage。将日期传递到一个新Date对象中,然后调用.toISOString()对我有用

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

这样可以抑制控制台中的任何警告。


这将抑制警告,但不利之处在于,如果您特定于时区,则我不建议这样做:因为它将把给定日期转换为UTC,因为我们在说'.toISOString()'。尝试从其他答案中说“ moment(new Date(“ 27/04/2016”))。format”,这将使时间保持在本地时间
。– whoami

15

像这样在您的函数中使用时刻

 moment(new Date(date)).format('MM/DD/YYYY')

如果您只是想摆脱“贬值的警告”,这就是您要寻找的简短答案
VictorC

6

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

当您使用矩创建时间对象时,会引起过时警告var today = moment();

如果您可以接受此警告,那么我有一种更简单的方法。

不要使用date从对象js的使用moment来代替。例如,用于moment()获取当前日期。

或将js日期对象转换为moment日期。您只需指定js日期对象的格式即可。

moment("js date", "js date format");

例如:

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

(但只有在您不赞成使用之前,才可以使用此方法,以后可能会贬值moment


6
认真!有关如何删除此弃用警告的问题!不问如何使用此弃用!另外,它已经被弃用了,而不是“将来可能会贬值”,而不是“将来会被删除”!
Al-Mothafar '07

@ Al-Mothafar,我有一个小小的疑问,当if条件失败时,您为什么不超越?您应该退出答案,然后继续。
Saahithyan Vigneswaran

2
谢谢,这是真正的答案,向我展示了我在这里可以知道的内容。
DigitalDesignDj

3

您可以使用

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

如果日期不是ISO格式,则应使用此格式,因为它会告诉我们当前的格式是什么。


1
尽管此代码可以回答问题,但提供有关如何和/或为什么解决问题的其他上下文将提高​​答案的长期价值。

@leopal进行了一些更改!
BeaST

2

用moment.js解析字符串。

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

当我尝试使用Unix格式获取星期数时,这可以帮助我摆脱弃用警告。
curious.netter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.