"पदावनति की चेतावनी: पल निर्माण js तारीख तक गिर जाता है" जब RFC2822 दिनांक को क्षण में बदलने का प्रयास किया जाता है।


164

मैं निम्नलिखित कोड का उपयोग कर रहा हूँ पल-पल का उपयोग कर स्थानीय समय के लिए एक सर्वर-साइड डेट-टाइम कन्वर्ट करने के लिए।

 moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()

लेकिन मुझे मिल रहा है:

पदावनति चेतावनी: पल निर्माण js दिनांक तक वापस आ जाता है। यह हतोत्साहित किया जाता है और आगामी प्रमुख रिलीज में हटा दिया जाएगा। अधिक जानकारी के लिए कृपया https://github.com/moment/moment/issues/1407 देखें ।

ऐसा लगता है कि मैं इससे छुटकारा नहीं पा सकता हूँ! मेरे द्वारा यह कैसे किया जा सकता है?


क्या आपने पढ़ा कि ऐसा करने के लिए उसका कहना कहाँ है?
टॉसलैब

7
जरूर पढ़े !! लेकिन या तो मैं उलझन में हूँ और कोई समाधान नहीं ला सका या वहाँ कोई समाधान नहीं था!
दारुश

वहां थोड़ा पढ़ने के बाद, यह एक वास्तविक मुद्दा प्रतीत होता है, जिसकी चर्चा महीनों पहले की गई थी ... एक और टूल लें ...
toesslab

जवाबों:


315

चेतावनी से छुटकारा पाने के लिए, आपको या तो करने की आवश्यकता है:

  • अपनी दिनांक स्ट्रिंग के ISO स्वरूपित संस्करण में पास करें:

    moment('2014-04-23T09:54:51');

  • आपके पास अभी जो स्ट्रिंग है उसमें पास करें, लेकिन यह बताएं कि स्ट्रिंग किस प्रारूप में है:

    moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');

  • अपनी स्ट्रिंग को जावास्क्रिप्ट दिनांक ऑब्जेक्ट में बदलें और फिर उस क्षण को पास करें:

    moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));

अंतिम विकल्प एक अंतर्निर्मित गिरावट है जो क्षण भर के लिए समर्थन करता है, साथ में हटाए गए कंसोल चेतावनी। वे कहते हैं कि वे भविष्य के रिलीज में इस गिरावट का समर्थन नहीं करेंगे। वे बताते हैं कि उपयोग new Date('my date')करना बहुत अप्रत्याशित है।


36
उपरोक्त उत्तर में गोलियों में से कोई भी पाठ इस प्रश्न को शुरू करने वाले भ्रामक की तुलना में बहुत ही बेहतर पदावनति चेतावनी संदेश देगा।
विल

2
moment((new Date('Thursday, November 12, 2015 11:59 PM').toISOSring());ठीक उपयोग कर रहा है ? या मैं सिर्फ निकट भविष्य में इस तरह चुपचाप दुर्घटना के लिए तैयार एक समस्या को दबा रहा हूं?
ब्रूनो फिंगर

आपके पास यह संदेश भी हो सकता है यदि पारित मान में अतिरिक्त अक्षर जैसे कि रिक्त स्थान प्रमुख या अनुगामी हों। यह आम तौर पर एक Invalidतारीख परिणाम के साथ जाता है ।
गिलियूम रेनॉल्ट

@ ब्रूनोफिंगर जो काम करना चाहिए। दिनांक () और toISOString () जावास्क्रिप्ट चीजें हैं, न कि मोमेंट चीजें।
जो विल्सन

यदि आपके पास कोई विकल्प नहीं है कि तिथि कैसे प्रदान की जाती है, तो मैं दूसरी बुलेट बिंदु की सिफारिश करूंगा, तिथि स्ट्रिंग के प्रारूप को निर्दिष्ट करना। यह सबसे अधिक अस्पष्टता को दूर करता है।
जोशुआ पिंटर

50

एक विकल्प के रूप में, आप सेटिंग द्वारा डिप्रेशन चेतावनी दिखाने को दबा सकते हैं moment.suppressDeprecationWarnings = true;


टाइपस्क्रिप्ट के लिए, आपको इसे पहले // @ts-ignoreसे कम करना होगा (कम से कम कुछ क्षणों-समय-क्षेत्र और @ प्रकार / पल-समय-क्षेत्र के लिए)।
ट्रूविल

7

momentआंतरिक रूप से दिनांक निर्माण new Date()जावास्क्रिप्ट में उपयोग करता है । new Date()निर्माण या तो में दिनांक स्ट्रिंग को पहचानता है RFC2822 या आईएसओ सभी ब्राउज़रों में प्रारूपों। जब momentइन स्वरूपों में नहीं तारीख के साथ एक वस्तु का निर्माण , पदावनति चेतावनी फेंक दिया है।

हालाँकि, कुछ स्वरूपों के लिए, अवक्षेपण चेतावनी को फेंक दिया जाता है, momentवस्तु का निर्माण क्रोम में सफलतापूर्वक किया जाएगा, लेकिन फ़ायरफ़ॉक्स या सफारी में नहीं। इसके कारण, Chrome में दिनांक संसाधित करना अपेक्षित (हर समय नहीं) के रूप में परिणाम दे सकता है और Invalid Dateदूसरों में फेंकता है।

विचार करें 02.02.2018,

क्रोम - moment("02.02.2018")._d>>Fri Feb 02 2018 00:00:00 GMT+0530 (India Standard Time)

फ़ायरफ़ॉक्स - moment("02.02.2018")._d>>Invalid Date

सफ़ारी - moment("02.02.2018")._d->Invalid Date

यदि moment.jsअनुशंसित / मानक प्रारूप का उपयोग नहीं किया जाता है तो आपके जोखिम पर इसका उपयोग किया जाता है।

दबाना चेतावनी को दबाने के लिए ,

  1. जैसा कि पिछले उत्तर में @ जो विल्सन द्वारा सुझाया गया है, momentनिर्माण पर तारीख का प्रारूप दें ।

उदाहरण : moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");

  1. आईएसओ या RFC2822 प्रारूप में तारीख दें।

उदाहरण: moment("2018-02-01T18:30:00.000Z")- आईएसओ प्रारूप

moment("Thu, 01 Feb 2018 18:30:00 GMT")- RFC2822 प्रारूप - Github में प्रारूप

  1. जैसा कि पिछले उत्तर में @niutech द्वारा सुझाया गया था, सेट करें

moment.suppressDeprecationWarnings = true;

  1. मेरा सुझाव है कि पल में इनपुट में गिरावट को अधिलेखित करें।

    moment.createFromInputFallback=function (config){
        config._d = new Date(config._i);
    }
    

जैसा कि (3) सभी चेतावनियों को दबाएगा, (4) केवल निर्माण की तारीख में गिरावट को दबाएगा। (4) का उपयोग करते हुए, आप प्राप्त Invalid Dateकरेंगे जैसे कि आंतरिक new Date()उपयोग किया जाता है और अन्य अपक्षय कंसोल में देखे जा सकते हैं, इसलिए पल को अपग्रेड किया जा सकता है या अपग्रेड किए गए तरीकों को आवेदन में बदला जा सकता है।


3

यदि आपकी तारीख आपको एक एपीआई string(जैसे मेरी समस्या) से पारित हो जाती है , तो आप स्ट्रिंग को क्षण में बदलने के लिए फ़िल्टर का उपयोग कर सकते हैं। यह पल निर्माण चेतावनी का ध्यान रखेगा।

$scope.apiDate = 10/29/2017 18:28:03";

angular.module('myApp').filter('stringToDate', function() {
  return function(value) {
     return Date.parse(value);
  };  
});

इसे दृश्य में जोड़ें:

{{apiDate | stringToDate | amDateFormat:'ddd, MMM DD'}}

0

जैसा कि ऊपर दिए गए उत्तरों में बताया गया है। दिनांक प्रारूप प्रदान करना काम करना चाहिए।

मुझे कोड की निम्न पंक्ति के साथ पदावनति संदेश क्यों मिलेगा। मैंने सोचा कि स्ट्रिंग + प्रारूप मुद्दे को मापने के लिए माना गया था। moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')। इसके अलावा, कृपया मुझे प्रदान किए जा रहे दिनांक प्रारूप पर नियंत्रण नहीं है। मुझे पता है कि मैं इसे स्वयं में परिवर्तित कर सकता हूं, 'YYYY-MM-DDTHH:mm:ss'फिर क्षण को डिप्रेसेशन संदेश नहीं दिखाता है। हालांकि, प्रलेखन के अनुसार, कोड की लाइन को काम करना चाहिए। यहाँ मैं देख रहा हूँ कि पदावनति संदेश है।

"पदावनति चेतावनी: प्रदान किया गया मान किसी मान्यताप्राप्त RFC2822 या ISO प्रारूप में नहीं है। पल निर्माण js दिनांक () में वापस आता है, जो सभी ब्राउज़रों और संस्करणों में विश्वसनीय नहीं है। गैर RFC2822 / ISO दिनांक प्रारूप हतोत्साहित किए जाते हैं और एक में हटा दिए जाएंगे। आगामी प्रमुख रिलीज। कृपया अधिक जानकारी के लिए http://momentjs.com/guides/#/warnings/js-date/ देखें । "

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.