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 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'); 에 따라 수행 할 수 있습니다 ... 24 시간 형식으로 1 또는 2 자리 월 및 일, 1 또는 2 자리 시간을 허용합니다
Jaromanda X

2
오류는 제공하는 형식이 인식 된 ISO 형식이 아니라는 것입니다. 인식 된 ISO 형식을 제공하거나 예상 형식에서 "힌트"하는 문자열을 제공하십시오
Jaromanda X

알았어 고마워이 형식도 어떻게 추가 할 수 있을까? var today = moment.tz (todaystring, $. urlParam ( 't_zone'));
Jemai

답변:


180

멋진 문서를 모두 확인하십시오!

여기에서 경고 메시지에 대해 설명합니다 .

문자열 + 형식

경고 : 문자열 구문 분석에 대한 브라우저 지원이 일치하지 않습니다. 어떤 형식을 지원해야하는지에 대한 사양이 없으므로 일부 브라우저에서 작동하는 것은 다른 브라우저에서 작동하지 않습니다.

ISO 8601 문자열 이외의 것을 구문 분석하는 일관된 결과를 얻으려면 String + Format 을 사용해야합니다 .

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

문자열 + 형식 (여러 형식)

둘 이상의 형식이있는 경우 문자열 + 형식 ( 's')을 확인하십시오.

입력 문자열의 정확한 형식을 모르지만 여러 형식 중 하나 일 수있는 형식 인 경우 형식 배열을 사용할 수 있습니다.

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

보다 구체적인 내용은 설명서를 확인하십시오.

시간대

시간대 에 해당하는 문서 인 Zone의 Checkout Parsing .

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

89
문서를 복사하여 붙여 넣는 대신 실제 답변을 제공하십시오.
Rebs

2
이것이 형식을 "입력"-moment ( "12-25-1995", [ "MM-DD-YYYY", "YYYY-MM-DD"]);
Demodave

2
@Rebs 일반적인 솔루션이 간단하지 않기 때문에 많은 문서를 추가했다고 생각합니다. 분명히 Jemai에 대한 특정 솔루션이 답에 있었을 것이므로 그 이후에 추가했습니다 (감사합니다!).하지만 전자가 여기에 많은 문서가있는 이유입니다.
christo8989

고맙지 만이 무거운 서식 프레임 워크없이 간단한 날짜를 원한다면이 경고를 무시할 수 있습니까?
웹 우먼

이것은 나를 도와주었습니다-> moment ( "12-25-1995", [ "MM-DD-YYYY", "YYYY-MM-DD"]);
Cesar Rodriguez T

50

이 작업은 저에게 효과적입니다.

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

5
이것은 콘솔 오염을 피하기위한 가장 간단한 해결 방법입니다.
Josey

2
IE 지원을 어느 정도 다루어야하는 사람에게는이 방법을 권하지 않습니다. IE 11에서는 특히 결과가 매우
좋지 않습니다

1
이것은 가장 간단하고 정확한 답변입니다. 고맙습니다.
Tahir Afridi

15

에서 날짜를 전달하려고했기 때문에이 오류가 발생했습니다 localStorage. 날짜를 새 Date객체에 전달한 다음 .toISOString () 을 호출 하면 나에게 속임수가되었습니다.

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

콘솔의 경고가 표시되지 않았습니다.


이렇게하면 경고가 표시되지 않지만 시간대와 관련이 있다면 단점은 다음과 같이 제안하지 않습니다. '. toISOString ()'이라고 말하면 주어진 날짜를 UTC로 변환합니다. 다른 답변에서 언급 한대로 "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

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

이것은 주 번호를 얻기 위해 유닉스 형식을 사용하려고 할 때 사용 중단 경고를 없애는 데 도움이됩니다.
curious.netter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.