আরএফসি ২২২২২ তারিখকে মুহুর্তে রূপান্তর করার চেষ্টা করার সময় "অবচয় হুঁশিয়ারি: মুহূর্তের নির্মাণটি জেএস তারিখে ফিরে আসে"


164

আমি সার্ভার-সাইডের তারিখ-সময়কে স্থানীয় সময়গুলিতে রূপান্তর করতে নীচের কোডটি ব্যবহার করছি।

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

তবে আমি পাচ্ছি:

অবচয় হুঁশিয়ারি: মুহূর্তের নির্মাণ জেএস তারিখে ফিরে আসে। এটি নিরুৎসাহিত করা হয়েছে এবং আসন্ন বড় রিলিজে এটি সরানো হবে। আরও তথ্যের জন্য দয়া করে https://github.com/moment/moment/issues/1407 দেখুন।

মনে হচ্ছে আমি এ থেকে মুক্তি পেতে পারি না! আমি কীভাবে এটি ঠিক করতে পারি?


আপনি যেখানে পড়েছেন সেখানে এটি করার কথা বলেছে?
টেসল্যাব

7
অবশ্যই পড়েছি !! তবে হয় আমি বিভ্রান্ত হয়েছি এবং কোন সমাধান আনতে পারছি না বা সেখানে কোনও সমাধানই হয়নি!
dariush

সেখানে কিছুটা পড়ার পরে, এটি একটি আসল সমস্যা বলে মনে হচ্ছে, যা কয়েক মাস আগে আলোচিত হয়েছিল ... অন্য একটি সরঞ্জাম নিন ...
টেসেলব

উত্তর:


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. আইএসও বা আরএফসি 2822 ফর্ম্যাটে তারিখটি দিন।

উদাহরণ: moment("2018-02-01T18:30:00.000Z")- আইএসও ফর্ম্যাট

moment("Thu, 01 Feb 2018 18:30:00 GMT")- RFC2822 বিন্যাস - গিটহাব মধ্যে বিন্যাস

  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'তখন মুহূর্তটি অবহেলা বার্তা প্রদর্শন করে না। তবে ডকুমেন্টেশন অনুসারে কোডের লাইনটি কাজ করা উচিত। এই হতাশার বার্তাটি আমি দেখছি।

"অবচয় হুঁশিয়ারি: প্রদত্ত মান কোনও স্বীকৃত আরএফসি 2822 বা আইএসও ফর্ম্যাটে নয় moment মুহূর্তের নির্মাণটি জেএস তারিখের পিছনে পড়ে (যা সমস্ত ব্রাউজার এবং সংস্করণে নির্ভরযোগ্য নয় R আসন্ন বড় রিলিজ। আরও তথ্যের জন্য দয়া করে http://momentjs.com/guides/#/warnings/js-date/ দেখুন "

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.