Dd-mm-yyy স্ট্রিংকে আজকে রূপান্তর করুন


184

আমি নিম্নলিখিতটি ব্যবহার করে জাভাস্ক্রিপ্টের একটি ডিডি-মিমি-ইয়াই ফর্ম্যাটটিতে একটি তারিখ অবজেক্টে রূপান্তর করার চেষ্টা করছি:

 var from = $("#datepicker").val();
 var to = $("#datepickertwo").val();
 var f = new Date(from);
 var t = new Date(to);

("#datepicker").val()dd-mm-yyyy ফর্ম্যাটে একটি তারিখ রয়েছে। যখন আমি নিম্নলিখিতগুলি করি, আমি "অবৈধ তারিখ" পাই:

alert(f);

এটি কি '-' চিহ্নের কারণে? আমি কীভাবে এটি কাটিয়ে উঠতে পারি?


এটি কি সমস্ত তারিখের সাথে বা বিশেষত একটিতে ঘটে?
কাসদেগা

উত্তর:


325

"-" এ বিভক্ত

আপনার প্রয়োজনীয় অংশগুলিতে স্ট্রিংটি পার্স করুন:

var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])

রিজেক্স ব্যবহার করুন

var date = new Date("15-05-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))

কেন রিজেক্স ব্যবহার করবেন না?

কারণ আপনি জানেন যে আপনি হাইফেন দ্বারা পৃথক করে তিনটি অংশ নিয়ে গঠিত স্ট্রিংয়ের উপর কাজ করবেন।

যাইহোক, আপনি যদি অন্য স্ট্রিংয়ের মধ্যে একই স্ট্রিংটির সন্ধান করছিলেন তবে রেজেক্স যাওয়ার উপায় হবে।

পুনঃব্যবহার

কারণ আপনি আপনার নমুনা কোডে এটি একাধিকবার করছেন এবং আপনার কোড বেসে অন্য কোথাও এটি কোনও ফাংশনে আবদ্ধ করুন:

function toDate(dateStr) {
  var parts = dateStr.split("-")
  return new Date(parts[2], parts[1] - 1, parts[0])
}

হিসাবে ব্যবহার:

var from = $("#datepicker").val()
var to = $("#datepickertwo").val()
var f = toDate(from)
var t = toDate(to)

অথবা আপনি যদি আপনার ফাংশনে jQuery মনে করেন না:

function toDate(selector) {
  var from = $(selector).val().split("-")
  return new Date(from[2], from[1] - 1, from[0])
}

হিসাবে ব্যবহার:

var f = toDate("#datepicker")
var t = toDate("#datepickertwo")

আধুনিক জাভাস্ক্রিপ্ট

আপনি যদি আরও আধুনিক জেএস ব্যবহার করতে সক্ষম হন তবে অ্যারের ধ্বংসগুলিও একটি দুর্দান্ত স্পর্শ:

const toDate = (dateStr) => {
  const [day, month, year] = dateStr.split("-")
  return new Date(year, month - 1, day)
}

9
আমাকে মারতে ... তবে আমি এখনও ডেটজে ব্যবহার করি। বেড়া পোস্টের ত্রুটির কারণে এটি ঠিক সঠিক নয়। মাসটি ০-১১ সুতরাং আপনার 1 টি বিয়োগ করা দরকার f f = নতুন তারিখ ([2] থেকে, [1] -1 থেকে, [0]);
কাসদেগা

12
ভুল তারিখ তৈরি করে এমন বাগ সহ নির্বাচিত উত্তর। অসাধারণ!
এপাসকারেলো

3
চিয়ার্স @ কাসদেগা - এটি সম্পাদনা করা হয়েছে ... কিছুক্ষণ আগে!
অ্যাড্রিয়ান লিঞ্চ

@ অ্যাড্রিয়ানলঞ্চ কীভাবে জাভাস্ক্রিপ্টে "মাসের ডিডি, ইয়াই" কে "এমএম / ডিডি / ইয়েই" রূপান্তর করবেন?
dilipkumar1007

1
@ অ্যাড্রিয়ান লিঞ্চ আধুনিক জাভাস্ক্রিপ্ট বিকল্পটি দুর্দান্ত! ধন্যবাদ.
আলেকজান্দ্রে রিবেইরো

134

নিয়মিত প্রকাশের উদাহরণ:

new Date( "13-01-2011".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );

8
একটি পুনর্বিবেশন যা গ্রহণ করে /তা হ'ল সীমানা এবং 2 বছর (বা 1 এর চেয়ে বড় কোনও গণনা) দিয়ে তৈরি একটি বছর:replace( /(\d{2})[-/](\d{2})[-/](\d+)/, "$2/$1/$3")
ইজাকি

1
কেন এটি উত্তর অ্যাডেমিরনুনো হতে হবে? কেন একটি পরিচিত আকারে স্ট্রিংয়ের জন্য RegEx ব্যবহার করবেন? আপনি কোনও নিদর্শন খুঁজছেন না, আপনি জানেন যে প্রথম সংখ্যাটি হচ্ছে দিন, দ্বিতীয় মাসে এবং তৃতীয় বছর the এই ক্ষেত্রে কাজের জন্য RegEx হ'ল ভুল সরঞ্জাম।
অ্যাড্রিয়ান লিঞ্চ

পুর্নবিবেচনার যে নেতৃস্থানীয় শূণ্যসমূহ এবং 2 বা 4 ডিজিটের বছর ছাড়া অ অঙ্ক বিভেদক, তারিখ লাগে: new Date( "23. 2. 15".replace( /(\d+)[^d]+(\d+)[^d]+(\d+)/, "$2/$1/$3") ); en.wikipedia.org/wiki/Date_format_by_country
PaulH

এটা খুব অনুশীলন লোক, ধন্যবাদ। আমার তারিখের ফর্ম্যাটটি এটি সময়ের সাথে আসে, সুতরাং আমি এটিকে পুনরায় পুনঃনির্মাণ করব: 'নতুন তারিখ ("13-01-2011"। স্থান (/ (\ d {2})) - (\ d {2}) - (\ w) / , "$ 2 / $ 1 / $ 3")); ' এটা কি ঠিক?
কামুরান সনেসেক

@ নীরাজসিংহ কীভাবে জাভাস্ক্রিপ্টে "মাসের ডিডি, ইয়াই" কে "এমএম / ডিডি / ইয়েই" রূপান্তর করবেন?
dilipkumar1007

15

আরেকটি সম্ভাবনা:

var from = "10-11-2011"; 
var numbers = from.match(/\d+/g); 
var date = new Date(numbers[2], numbers[0]-1, numbers[1]);

অঙ্কগুলি মেলে এবং সেগুলি পুনরায় অর্ডার করুন


এছাড়াও মূল প্রশ্নটি "dd-mm-yyyy" নির্দিষ্ট করেছে, "মিমি-ডিডি-ইয়াই" নয়, তবে এটি এখনও ভুল (তবে কেবলমাত্র)।
ফিল এম জোন্স

@ পেসম্যাকেল্লো কীভাবে জাভাস্ক্রিপ্টে "মাসের ডিডি, ইয়াই" কে "এমএম / ডিডি / ইয়াই" তে রূপান্তর করবেন?
dilipkumar1007

1
var date = new Date(numbers[2], numbers[1]-1, numbers[0]);
রুই নুনস


6
var from = $("#datepicker").val(); 
var f = $.datepicker.parseDate("d-m-Y", from);

3
আপনি কি ডেট.পারসেট ডেট পাচ্ছেন?
কাসদেগা

@ কাসেদেগা দুঃখিত, আমি $ .ডেটপিকার.পার্সডেটের কথা ভাবছিলাম, এখনই ঠিক করে রেখেছি :)
সাদ ইমরান।

আপনি api.jqueryui.com/datepicker$.datepicker.parseDate("dd-mm-yy", from);24-01-2017
এন্ড্রেয়া মাউরো

4

আপনি Date()অবজেক্টের প্রথম বন্ধনের ভিতরেও একটি তারিখ লিখতে পারেন :

new Date("Month dd, yyyy hh:mm:ss")
new Date("Month dd, yyyy")
new Date(yyyy,mm,dd,hh,mm,ss)
new Date(yyyy,mm,dd)
new Date(milliseconds)

@ অমিতসেনগার কীভাবে জাভাস্ক্রিপ্টে "মাসের ডিডি, ইয়াই" কে "এমএম / ডিডি / ইয়াই" তে রূপান্তর করবেন?
dilipkumar1007

3

এই ফর্ম্যাটটি ব্যবহার করুন: myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00


1
আপনি কোথায় parseDateথেকে এই ফাংশন পেয়েছেন? এটি কি কোনও জাভাস্ক্রিপ্ট ফাংশন?
জোসেফ সিলবার

দুঃখিত আমি কীভাবে এটি বাস্তবায়ন করব? এছাড়াও আমার dd-mm-yy হিসাবে ফর্ম্যাটটি প্রয়োজন
user559142

পার্সেটেট একটি দেশীয় জেএস ফাংশন। আরও তথ্যের জন্য দেখুন: xaprb.com/articles/javascript-date-parsing-demo.html
ডায়োডিয়াস - জেমস ম্যাকফার্লেন

1
@ ডায়োডিয়াস ... আসলেই এটা দেশীয়? কিভাবে এফএফ এবং ক্রোম নিক্ষেপ ত্রুটি?
এপাসকারেলো

2
@ ডায়োডিয়াস এমনকি সর্বশেষ সম্পাদনার পরেও এটি আমার পক্ষে যথেষ্ট পরিমাণে কাজ করে না (কমপক্ষে ক্রোমের সাথে)। এটি তারিখ '2011-01-03'এবং ইউটিসি সময় নির্ধারণ করে 00:00:00। সুতরাং যদি ব্যবহারকারীর সময় অঞ্চলটি ইউটিসির চেয়ে কম হয় তবে এটি আসলে আগের দিন হবে।
মাইক

3

আমার ক্ষেত্রে

new Date("20151102034013".replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "$1-$2-$3T$4:$5:$6"))

ফলাফল: সোম নভেম্বর 02 2015 04:40:13 GMT + 0100 (সিইটি) তারপর আমি মিলিসেকেন্ডের সাথে কাজ করতে .getTime () ব্যবহার করি


3

গৃহীত উত্তর কিন্ডার একটি বাগ রয়েছে

var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])

ডেটপিকারে "77-78-7980" রয়েছে কিনা তা অবশ্যই বিবেচনা করুন যা অবশ্যই বৈধ তারিখ নয়। এর ফলস্বরূপ:

var f = new Date(7980, 77, 77);
=> Date 7986-08-15T22:00:00.000Z

যা সম্ভবত কাঙ্ক্ষিত ফলাফল নয়।

এমডিএন সাইটে এর কারণ ব্যাখ্যা করা হয়েছে :

যেখানে তারিখটিকে একাধিক যুক্তিযুক্ত কনস্ট্রাক্টর হিসাবে ডাকা হয়, মানগুলি যদি তাদের লজিকাল পরিসরের চেয়ে বেশি হয় (যেমন 13 মাসের মান হিসাবে দেওয়া হয় বা মিনিটের মানের জন্য 70) তবে সংলগ্ন মানটি সামঞ্জস্য করা হবে। যেমন new Date(2013, 13, 1), সমান new Date(2014, 1, 1)


সমস্যা সমাধানের আরও ভাল উপায় হ'ল:

const stringToDate = function(dateString) {
  const [dd, mm, yyyy] = dateString.split("-");
  return new Date(`${yyyy}-${mm}-${dd}`);
};

console.log(stringToDate('04-04-2019'));
// Date 2019-04-04T00:00:00.000Z

console.log(stringToDate('77-78-7980'));
// Invalid Date

এটি আপনাকে অবৈধ ইনপুট হ্যান্ডেল করার সম্ভাবনা দেয়।

উদাহরণ স্বরূপ:

const date = stringToDate("77-78-7980");

if (date === "Invalid Date" || isNaN(date)) {
  console.log("It's all gone bad");
} else {
  // Do something with your valid date here
}

2

আপনাকে সাহায্য করার জন্য আপনি একটি বাহ্যিক গ্রন্থাগার ব্যবহার করতে পারেন।

http://www.mattkruse.com/javascript/date/source.html

getDateFromFormat(val,format);

এটিও দেখুন: জাভাস্ক্রিপ্টে ডেটটাইম স্ট্রিং পার্স করুন


জাভাস্ক্রিপ্টে myDate = '20 / 06/17 'কে '20 / 6/2017 00:00:00' ফর্ম্যাটে রূপান্তর করবেন?
ঘনশ্যাম লাখানী

1

এই সমস্ত ক্ষুদ্র তারিখ সম্পর্কিত বিষয়গুলির জন্য ডেটেজগুলি একবার দেখুন ... আপনি পার্সেট ডেট ফাংশন দ্বারা এটিও সমাধান করতে পারেন


0

আপনি একটি Regexp ব্যবহার করতে পারেন।

var result = /^(\d{2})-(\d{2})-(\d{4})$/.exec($("#datepicker").val());
if (result) {
    from = new Date(
        parseInt(result[3], 10), 
        parseInt(result[2], 10) - 1, 
        parseInt(result[1], 10)
    );
}

ভুল মাসে উত্পাদন! মাস শূন্য থেকে শুরু হয়, একটি নয়। সুতরাং আপনি যদি জান করেন, আপনার ফেব্রুয়ারী বলবে
এপাসক্যালো

1
@ পেসকারেলো - ডেট এপিআই কত লম্পট তা ভুলে গেছেন।
কেওসপ্যান্ডিয়ন

@ চাওসপ্যান্ডিয়ন: মাইডেট = '20 / 06/17 'কে জাভাস্ক্রিপ্টে '20 / 6/2017 00:00:00' ফর্ম্যাটে রূপান্তর করবেন?
ঘনশ্যাম লাখানী

-1
new Date().toLocaleDateString();

যে হিসাবে সহজ, শুধু আপনার তারিখ js তারিখ অবজেক্ট পাস


আপনি কি ডেট স্ট্রিংকে ডেট কন্সট্রাক্টরের মতো পাস করতে চান, new Date('30/12/2018').toLocaleDateString()?? এটি অবৈধ তারিখটি প্রদান করে
Ms.Tamil
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.