Cảnh báo khấu hao trong Moment.js - Không ở định dạng ISO được công nhận


175

Tôi nhận được cảnh báo rằng giá trị được cung cấp cho thời điểm này không ở định dạng ISO được công nhận. Tôi đã thay đổi biến của mình ngày hôm nay với chức năng khoảnh khắc và nó vẫn không hoạt động.

Đây là lỗi cảnh báo:

Cảnh báo khấu hao: giá trị được cung cấp không ở định dạng ISO được công nhận. thời điểm xây dựng rơi trở lại js Date (), không đáng tin cậy trên tất cả các trình duyệt và phiên bản. Các định dạng ngày không ISO không được khuyến khích và sẽ bị xóa trong một bản phát hành chính sắp tới. Vui lòng tham khảo http://momentjs.com/guides/#/warnings/js-date/ để biết thêm thông tin. Đối số: [0] _isAMomentObject: true, _isUTC: true, _useUTC: true, _l: không xác định, _i: 2016-9-26 19:30, _f: không xác định, _strict: không xác định, _locale: [đối tượng]

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
Tôi nghĩ rằng cảnh báo đề cập đến '2016-9-26 19:30'và đó không phải là định dạng ISO được công nhận
Jaromanda X

lỗi trên định dạng là gì? vậy tôi có cần thêm 0 không?
Jemai

1
Bạn có thể làm moment.tz('2016-9-28 20:30', 'YYYY-M-D H:mm', 'Pacific/Auckland');theo tài liệu ... điều này sẽ chấp nhận 1 hoặc 2 chữ số tháng và ngày, 1 hoặc 2 chữ số giờ ở định dạng 24 giờ
Jaromanda X

2
Lỗi là định dạng bạn đang cung cấp không phải là định dạng ISO được công nhận ... hoặc cung cấp định dạng ISO được công nhận hoặc cung cấp một chuỗi "gợi ý" ở định dạng dự kiến
Jaromanda X

Được rồi cảm ơn về cái này tôi có thể thêm định dạng này không? var hôm nay = khoảnh khắc.tz (hôm nay, $. urlParam ('t_zone'));
Jemai

Câu trả lời:


180

Kiểm tra tất cả các tài liệu tuyệt vời của họ!

Đây là nơi họ thảo luận về Thông điệp cảnh báo .

Chuỗi + Định dạng

Cảnh báo: Hỗ trợ trình duyệt để phân tích chuỗi không nhất quán. Vì không có thông số kỹ thuật về định dạng nào sẽ được hỗ trợ, những gì hoạt động trong một số trình duyệt sẽ không hoạt động trong các trình duyệt khác.

Để có kết quả phân tích nhất quán bất kỳ thứ gì ngoài chuỗi ISO 8601, bạn nên sử dụng Chuỗi + Định dạng .

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

Chuỗi + Định dạng (nhiều định dạng)

Nếu bạn có nhiều định dạng, hãy xem Chuỗi + Định dạng của chúng (với 's').

Nếu bạn không biết định dạng chính xác của chuỗi đầu vào, nhưng biết nó có thể là một trong nhiều định dạng, bạn có thể sử dụng một loạt các định dạng.

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

Vui lòng kiểm tra các tài liệu cho bất cứ điều gì cụ thể hơn.

Múi giờ

Kiểm tra phân tích cú pháp trong khu vực , tài liệu tương đương cho múi giờ.

Hàm tạo của.t.t.t lấy tất cả các đối số giống như hàm tạo mô men, nhưng sử dụng đối số cuối cùng làm định danh múi giờ.

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

BIÊN TẬP

//...
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
Thay vì sao chép và dán tài liệu, xin vui lòng cung cấp một câu trả lời thực tế.
Hoàn trả

2
đây là điều giúp tôi đặt định dạng thành "đầu vào" - thời điểm ("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);
Demodave

2
@Rebs Tôi nghĩ rằng tôi đã thêm rất nhiều tài liệu vì giải pháp chung không đơn giản. Rõ ràng là giải pháp cụ thể cho Jemai nên có trong câu trả lời và tôi đã thêm nó từ đó (cảm ơn bạn!) Nhưng trước đây là lý do tại sao có quá nhiều tài liệu ở đây.
christo8989

Cảm ơn nhưng nếu bạn chỉ muốn một cuộc hẹn hò đơn giản mà không có khuôn khổ hình thành nặng nề này, chúng ta có thể bỏ qua cảnh báo này thì sao?
Nữ web

điều này đã giúp tôi -> khoảnh khắc ("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);
Cesar Rodriguez T

50

Làm điều này làm việc cho tôi:

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

5
Đây là công việc đơn giản nhất để tránh ô nhiễm giao diện điều khiển
Josey

2
Tôi sẽ không tư vấn phương pháp này cho bất kỳ ai phải đối phó với hỗ trợ IE ở bất kỳ mức độ nào. Kết quả rất dễ bị
lung lay

1
Đây là câu trả lời đơn giản và chính xác nhất. Cảm ơn nó đã giúp tôi.
Tahir Afridi

15

Tôi gặp phải lỗi này vì tôi đã cố gắng vượt qua trong một ngày localStorage. Vượt qua ngày vào một Dateđối tượng mới và sau đó gọi .toISOString () đã thực hiện thủ thuật cho tôi:

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

Điều này đã ngăn chặn bất kỳ cảnh báo trong giao diện điều khiển.


Điều này sẽ ngăn chặn cảnh báo nhưng nhược điểm là nếu bạn cụ thể theo múi giờ, thì tôi sẽ không đề xuất điều này: vì nó sẽ chuyển đổi ngày đã cho thành UTC như chúng ta đang nói '.toISOString ()'. Hãy thử "khoảnh khắc (ngày mới (" 27/04/2016 ")). Định dạng" như đã nêu từ câu trả lời khác - sẽ giữ thời gian ở địa phương ..
whoami

15

sử dụng thời điểm trong chức năng của bạn như thế này

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

Đây là câu trả lời ngắn gọn mà bạn đang tìm kiếm nếu bạn chỉ muốn thoát khỏi "cảnh báo mất giá"
VictorC

6

Câu trả lời này là để hiểu rõ hơn về cảnh báo này

Cảnh báo khấu hao được gây ra khi bạn sử dụng thời điểm để tạo đối tượng thời gian var today = moment();,.

Nếu cảnh báo này ổn với bạn thì tôi có một phương pháp đơn giản hơn.

Đừng sử dụng dateđối tượng từ jssử dụng momentthay thế. Ví dụ sử dụng moment()để có được ngày hiện tại.

Hoặc chuyển đổi jsđối tượng momentngày thành ngày. Bạn chỉ có thể làm điều đó chỉ định định dạng của jsđối tượng ngày của bạn .

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

ví dụ:

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

(NHƯNG BẠN CHỈ CÓ THỂ SỬ DỤNG PHƯƠNG PHÁP NÀY KHÔNG GIỚI HẠN, điều này có thể bị khấu hao momenttrong tương lai)


6
Nghiêm túc! câu hỏi về làm thế nào để loại bỏ cảnh báo khấu hao này! không hỏi làm thế nào để sử dụng sự phản đối này! Ngoài ra, đó là "điều này sẽ được loại bỏ trong tương lai" chứ không phải "điều này có thể bị khấu hao từ thời điểm này trong tương lai" nó đã bị phản đối!
Al-Mothafar

@ Al-Mothafar, tôi có một nghi ngờ nhỏ, tại sao bạn lại vượt lên khi ifđiều kiện thất bại. Bạn nên thoát câu trả lời không tiến hành.
Saahithyan Vigneswaran

2
Cảm ơn, đây là câu trả lời thực sự cho tôi thấy những gì tôi có thể biết ở đây.
DigitalDesignDj

3

Bạn có thể dùng

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

Điều này nên được sử dụng khi ngày không phải là Định dạng ISO vì nó sẽ cho biết thời điểm định dạng hiện tại của chúng tôi là gì.


1
Mặc dù mã này có thể trả lời câu hỏi, việc cung cấp ngữ cảnh bổ sung về cách thức và / hoặc lý do giải quyết vấn đề sẽ cải thiện giá trị lâu dài của câu trả lời.
leopal

@leopal đã thực hiện một số thay đổi!
BeaST 30

2

Phân tích chuỗi với khoảnh khắc.js.

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

Điều này giúp tôi thoát khỏi cảnh báo khấu hao khi tôi đang cố gắng sử dụng định dạng unix để lấy số tuần.
curious.netter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.