คำเตือนการเลิกใช้ใน Moment.js - ไม่อยู่ในรูปแบบ ISO ที่รู้จัก


176

ฉันได้รับคำเตือนว่าค่าที่ให้ในขณะนั้นไม่อยู่ในรูปแบบ ISO ที่ได้รับการยอมรับ ฉันเปลี่ยนตัวแปรของฉันในวันนี้ด้วยฟังก์ชั่นโมเมนต์ แต่ก็ยังใช้งานไม่ได้

นี่คือข้อผิดพลาดคำเตือน:

คำเตือนการเลิกใช้: ค่าที่ให้ไม่ได้อยู่ในรูปแบบ ISO ที่รู้จัก การสร้างช่วงเวลาตกไปถึง 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: [วัตถุวัตถุ]

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 หลักเดือนและวัน 1 หรือ 2 หลักชั่วโมงในรูปแบบ 24 ชั่วโมง
Jaromanda X

2
ข้อผิดพลาดคือรูปแบบที่คุณจัดหาไม่ใช่รูปแบบ ISO ที่รู้จัก ... อาจให้รูปแบบ ISO ที่เป็นที่รู้จักหรือระบุสตริงที่ "คำแนะนำ" ตามรูปแบบที่คาดไว้
Jaromanda X

โอเคขอบคุณรูปแบบนี้ที่ฉันสามารถเพิ่มรูปแบบนี้ด้วย var today = moment.tz (todaystring, $. urlParam ('t_zone'));
Jemai

คำตอบ:


180

ตรวจสอบเอกสารที่ยอดเยี่ยมทั้งหมดของพวกเขา!

นี่เป็นที่ที่พวกเขาหารือเกี่ยวกับข้อความคำเตือน

รูปแบบ String +

คำเตือน: การสนับสนุนเบราว์เซอร์สำหรับการวิเคราะห์คำสตริงไม่สอดคล้องกัน เนื่องจากไม่มีข้อมูลจำเพาะเกี่ยวกับรูปแบบที่ควรได้รับการสนับสนุนสิ่งที่ใช้ได้กับเบราว์เซอร์บางตัวจะไม่ทำงานในเบราว์เซอร์อื่น

เพื่อให้ได้ผลลัพธ์ที่สอดคล้องแยกสิ่งอื่นนอกเหนือจาก ISO 8601 สตริงคุณควรใช้รูปแบบสตริง +

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

สตริง + รูปแบบ (หลายรูปแบบ)

หากคุณมีมากกว่าหนึ่งรูปแบบให้ลองดูรูปแบบสตริง +ของพวกเขา(พร้อมด้วย 's')

หากคุณไม่ทราบรูปแบบที่แน่นอนของสตริงป้อนข้อมูล แต่รู้ว่าอาจเป็นหนึ่งในหลาย ๆ รูปแบบคุณสามารถใช้รูปแบบอาร์เรย์ได้

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

กรุณาชำระเงินเอกสารสำหรับสิ่งที่เฉพาะเจาะจงมากขึ้น

เขตเวลา

ชำระเงินการแยกวิเคราะห์ในโซนเอกสารที่เทียบเท่าสำหรับเขตเวลา

ตัวสร้าง 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
นี่คือสิ่งที่ช่วยให้ฉันวางรูปแบบเป็น "อินพุต" - ช่วงเวลา ("12-25-1995", ["MM-DD-YYYY", "YYYY-MM-DD"]);
Demodave

2
@Rebs ฉันคิดว่าฉันเพิ่มเอกสารจำนวนมากเพราะโซลูชันทั่วไปไม่ได้ตรงไปตรงมา เห็นได้ชัดว่าคำตอบเฉพาะสำหรับเจไมควรอยู่ในคำตอบและฉันได้เพิ่มมันมาตั้งแต่ (ขอบคุณสำหรับคุณ!) แต่ก่อนหน้านี้คือสาเหตุที่มีเอกสารมากมายที่นี่
christo8989

ขอบคุณ แต่ถ้าคุณต้องการวันที่เรียบง่ายโดยไม่มีกรอบการทำงานที่หนักหน่วงนี้เราสามารถเพิกเฉยต่อคำเตือนนี้ได้ไหม
Webwoman

สิ่งนี้ช่วยฉัน -> ช่วงเวลา ("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
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 ()' ลอง "ช่วงเวลา (วันที่ใหม่ (" 27/04/2559 ")) รูปแบบ" ตามที่ระบุจากคำตอบอื่น ๆ - ซึ่งจะทำให้เวลาในท้องถิ่น ..
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
อย่างจริงจัง! คำถามเกี่ยวกับวิธีการลบคำเตือนการเลิกใช้นี้! ไม่ถามวิธีการใช้การคัดค้านนี้! นอกจากนี้ยังเป็น "สิ่งนี้จะถูกลบออกในอนาคต" ไม่ใช่ "สิ่งนี้อาจถูกคิดค่าเสื่อมราคาจากช่วงเวลาในอนาคต" มันเลิกใช้แล้ว!
อัล Mothafar

@ อัล Mothafar ฉันมีข้อสงสัยเล็กน้อยทำไมคุณไปเกินกว่าที่เมื่อifเงื่อนไขล้มเหลว คุณควรออกจากคำตอบไม่ดำเนินการต่อ
Saahithyan Vigneswaran

2
ขอบคุณนี่คือคำตอบที่แสดงให้ฉันเห็นว่าฉันสามารถรู้ได้อย่างไร
DigitalDesignDj

3

คุณสามารถใช้ได้

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

ควรใช้เมื่อวันที่ไม่ใช่รูปแบบ ISO เพราะจะบอกช่วงเวลาว่ารูปแบบปัจจุบันของเราคืออะไร


1
ในขณะที่รหัสนี้อาจตอบคำถามให้บริบทเพิ่มเติมเกี่ยวกับวิธีการและ / หรือทำไมมันแก้ปัญหาจะปรับปรุงค่าระยะยาวของคำตอบ
leopal

@leopal ทำการเปลี่ยนแปลงบางอย่าง!
BeaST 30

2

การแยกสตริงด้วย moment.js

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

สิ่งนี้ช่วยฉันกำจัดคำเตือนการเลิกใช้เมื่อฉันพยายามใช้รูปแบบ unix เพื่อรับหมายเลขสัปดาห์
curious.netter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.