তারিখটি বৈধ কিনা তা পরীক্ষা করে দেখুন


124

নীচে দৃশ্যটি হয়:

আমার একটি Stringতারিখ এবং একটি তারিখের ফর্ম্যাট রয়েছে যা ভিন্ন। প্রাক্তন:
তারিখ: 2016-10-19 তারিখের
ফর্ম্যাট: "ডিডি-এমএম-ওয়াইওয়াইওয়াই"।

এই তারিখটি একটি বৈধ তারিখ কিনা তা আমার চেক করা দরকার।

আমি জিনিস অনুসরণ করার চেষ্টা করেছি

var d = moment("2016-10-19",dateFormat);

d.isValid()falseপ্রতিবার ফিরে আসছে । মোমেন্ট.জেএস কি প্রদত্ত ফর্ম্যাটটিতে তারিখটি পার্স করে না?

তারপরে আমি DD-MM-YYYYপ্রথমে তারিখটি ফর্ম্যাট করার চেষ্টা করেছি এবং তারপরে এটি মোমেন্ট.জেএস-এ পাস করব:

var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);

এখন date.isValid()আমাকে কাঙ্ক্ষিত ফলাফল দিচ্ছে, তবে এখানে Moment.js তারিখ অবজেক্টটি দু'বার তৈরি হয়েছে। আমি কীভাবে এড়াতে পারি? এর চেয়ে ভাল সমাধান কি আছে?

এফওয়াইআই আমাকে পরিবর্তন করার অনুমতি নেই dateFormat


আপনি কি ডেট ফরম্যাটের মান পরিবর্তন করার অনুমতি দিচ্ছেন না? সেক্ষেত্রে আপনাকে ইনপুটটির ফর্ম্যাটটি পরিবর্তন করতে হবে, যেহেতু ২০১০-১০-১-19 হ'ল YYYY-MM-DD, DD-MM-YYYY নয়। আপনি কি পরিবর্তন করতে পারবেন?
পোচেন

তারিখ চয়নকারী থেকে ইনপুট আসছে। এটিও পরিবর্তন করতে পারবেন না :(
গণেশ

1
আমি জিজ্ঞাসা করতে পারি যে কেন আপনাকে ডেটফর্ম্যাট ভেরিয়েবল পরিবর্তন করার অনুমতি নেই? var d = moment ("19-10-2016", "DD-MM-YYYY"); যতটা আমি উদ্বিগ্ন আপনার সমস্যাগুলি সমাধান করবে
পোচেন

সত্যিই বলতে পারি না। তবে সেই মানটি পরিবর্তন করার বিষয়টি আমার নিয়ন্ত্রণে নেই।
গণেশ

উত্তর:


185

সমাধান সন্ধান করতে সক্ষম হয়েছিল। যে তারিখটি আমি পাচ্ছি তা আইএসও ফর্ম্যাটে রয়েছে, কেবলমাত্র মুহুর্তের তারিখ সরবরাহ করা এটি বৈধতা দেবে, ডেট ফরম্যাটটি পাস করার দরকার নেই।

var date = moment("2016-10-19");

এবং তারপরে date.isValid()কাঙ্ক্ষিত ফলাফল দেয়।


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


4
কেবলমাত্র একটি মাথা আপ যা এটি সর্বদা কার্যকর হয় না: var a = moment('12345'); a.isValid() // is trueএটি ব্যর্থ হয় কারণ মুহুর্তটি তারিখটিকে বিশ্লেষণ করতে না পারলে ডিফল্ট তারিখের অবজেক্টে ফিরে আসবে। এবং ডিফল্ট তারিখ বস্তুর সবসময় একটি তারিখ ফিরে আসবে (ঠিক এক যদি আপনি চান।)
Mauvis Ledford

1
এটি যুক্ত করা দরকার moment('02').isValid() === true, যাতে আপনি এটির সাথে সাবধানতা অবলম্বন করতে চাইতে পারেন
ব্রুনো ফিঙ্গার

3
এছাড়াওmoment('abcde 1').isValid() === true
অমিরাম কোরচ

119

var date = moment('2016-10-19', 'DD-MM-YYYY', true);

অনুরোধ করার সময় আপনার একটি তৃতীয় যুক্তি যুক্ত করা উচিত momentযা কঠোরভাবে বিশ্লেষণকে কার্যকর করে। এই মুহুর্তের প্রাসঙ্গিক প্রবন্ধটির প্রাসঙ্গিক অংশটি এখানে দেওয়া হয়েছে: http://momentjs.com/docs/#/parsing/string-format/ এটি বিভাগটির শেষের নিকটে।


এটির কোনও প্রভাব নেই।
বিল্লাল বেগেরাদজ

এই উত্তরটি সঠিক উত্তর হওয়া উচিত ........ @ বেগ্রেডজ এর প্রভাব রয়েছে, বিভিন্ন মান ব্যবহার করার চেষ্টা করুন, কখনও কখনও সঠিক এবং কখনও কখনও ভুল
আক্কি

এবং আপনি এখানে
কুহার

এটি আপনাকে বছরের হিসাবে 0000 প্রবেশ করতে দেবে
এডি

17

আপনি এখানে যান: Fidddle কাজ করছে

$(function(){
  var dateFormat = 'DD-MM-YYYY';
  alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid());
});

যেমন আমি বলেছিলাম যে ডেটফর্ম্যাটটি হ'ল 'ডিডি-এমএম-ওয়াইওয়াইওয়াই' এবং এটি পরিবর্তন করার অনুমতি পাচ্ছি না।
গণেশ

আচ্ছা বুঝলাম. আমাকে এটি দেখতে দিন।
gschambial

এখানে কি তারিখের স্ট্রিং পরিবর্তন করার অনুমতি রয়েছে 2016-10-19?
gschambial

নাঃ। এটি তারিখ চয়নকারী থেকে আসছে
গণেশ

1
ডেটপিকারটি আসার পরে এবং এটিতে ইনপুট দেওয়ার আগে আপনি এটিকে সংশোধন করতে পারবেন না var d = moment("2016-10-19",dateFormat);?
gschambial

14

আমি undefinedডেটা মানগুলির কেসগুলি পরিচালনা করতে নতুন তারিখের সাথে মুহূর্তটি ব্যবহার করি :

const date = moment(new Date("2016-10-19"));

কারণে: moment(undefined).isValid() == true

যেখানে ভাল উপায় হিসাবে: moment(new Date(undefined)).isValid() == false



8

মোমেন্ট ব্যবহার করে স্ট্রিংটি বৈধ তারিখ কিনা তা কীভাবে পরীক্ষা করবেন, যখন তারিখ এবং তারিখের ফর্ম্যাট আলাদা থাকে

দুঃখিত, তবে এই থ্রেডে প্রদত্ত যে কোনও সমাধান আসলে জিজ্ঞাসিত প্রশ্নের উত্তর দিয়েছে?

আমার কাছে একটি স্ট্রিং ডেট এবং একটি তারিখ ফর্ম্যাট যা আলাদা which প্রাক্তন: তারিখ: 2016-10-19 তারিখের ফর্ম্যাট: "ডিডি-এমএম-ওয়াইওয়াইওয়াই"। এই তারিখটি একটি বৈধ তারিখ কিনা তা আমার চেক করা দরকার।

নিম্নলিখিত আমার জন্য কাজ করে ...

const date = '2016-10-19';
const dateFormat = 'DD-MM-YYYY';
const toDateFormat = moment(new Date(date)).format(dateFormat);
moment(toDateFormat, dateFormat, true).isValid();

// Note: `new Date()` circumvents the warning that
// Moment throws (https://momentjs.com/guides/#/warnings/js-date/),
// but may not be optimal.

তবে সত্যি কথা, কেন বুঝতে হবে না moment.isDate()( ডকুমেন্ট হিসাবে ) কেবল কোনও বস্তুকে গ্রহণ করে। আমার মতে একটি স্ট্রিং সমর্থন করা উচিত।


1
যদি আমরা মুহূর্তের জন্য তৃতীয় তর্ক হিসাবে সত্যটি পাস করি তবে এটি সঠিক তারিখের ফর্ম্যাটটির জন্য যাচাই করে।
রাজ কুমার এন

2
console.log(` moment('2019-09-01', 'YYYY-MM-DD').isValid()?  ` +moment('2019-09-01', 'YYYY-MM-DD').isValid())
console.log(` moment('2019-22-01', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-01', 'YYYY-DD-MM').isValid())
console.log(` moment('2019-22-22', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-22', 'YYYY-DD-MM').isValid())
console.log(` moment('undefined', 'YYYY-DD-MM').isValid()?  ` +moment('undefined', 'YYYY-DD-MM').isValid())

 moment('2019-09-01', 'YYYY-MM-DD').isValid()?  true
 moment('2019-22-01', 'YYYY-DD-MM').isValid()?  true
 moment('2019-22-22', 'YYYY-DD-MM').isValid()?  false
 moment('undefined', 'YYYY-DD-MM').isValid()?  false

আপনি দয়া করে আপনার উত্তরে কিছু ব্যাখ্যা যোগ করতে পারেন? ইতিমধ্যে বিদ্যমান এবং স্বীকৃত উত্তরে এটি কোন অতিরিক্ত মান যুক্ত করে?
slpan

0

যদি তারিখটি বৈধ হয় তবে getTime()সর্বদা নিজের সমান হবে।

var date = new Date('2019-12-12');
if(date.getTime() - date.getTime() === 0) {
    console.log('Date is valid');
} else {
    console.log('Date is invalid');
}

-2

আর একবার চেষ্টা কর. এটি দুর্দান্ত নয় তবে এটি ততক্ষণ কাজ করবে যতক্ষণ না আপনার তারিখ চয়নকারীর থেকে ইনপুট ধ্রুবক ফর্ম্যাট হয়।

এটি উদাহরণস্বরূপ আপনার চয়নকারী থেকে আসা খারাপ তারিখ

https://jsfiddle.net/xs8tvox9/

var dateFormat = 'DD-MM-YYYY'
var badDate = "2016-10-19";

var splittedDate = badDate.split('-');

if (splittedDate.length == 3) {
  var d = moment(splittedDate[2]+"-"+splittedDate[1]+"-"+splittedDate[0], dateFormat);
  alert(d.isValid())
} else {
  //incorrectFormat
}

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