জাভাস্ক্রিপ্টে একটি স্ট্রিংকে একটি তারিখে রূপান্তর করা


668

আমি কীভাবে জাভাস্ক্রিপ্টে একটি স্ট্রিংকে তারিখে রূপান্তর করতে পারি?

var st = "date in some format"
var dt = new date();

var dt_st= //st in date format same as dt


1
ওহ আমি এখন বিভ্রান্ত আপনি চান Date -> Stringবা না String -> Date?
ফেলিক্স ক্লিং

উত্তর:


827

স্ট্রিং পার্সিংয়ের জন্য সেরা স্ট্রিং ফর্ম্যাটটি জাভাস্ক্রিপ্ট তারিখ অবজেক্ট কনস্ট্রাক্টরের সাথে একত্রে তারিখের আইএসও ফর্ম্যাট।

আইএসও ফর্ম্যাট এর উদাহরণ: YYYY-MM-DDবা YYYY-MM-DDTHH:MM:SS

কিন্তু অপেক্ষা করো! কেবলমাত্র "আইএসও ফর্ম্যাট" ব্যবহার করা নিজে থেকে নির্ভরযোগ্যভাবে কাজ করে না। স্ট্রিংটি কখনও কখনও ইউটিসি এবং কখনও কখনও লোকালটাইম (ব্রাউজার বিক্রেতা এবং সংস্করণের উপর ভিত্তি করে) হিসাবে পার্স করা হয়। সর্বদা সর্বোত্তম অনুশীলনটি হ'ল ইউটিসি হিসাবে তারিখগুলি সঞ্চয় করা এবং ইউটিসি হিসাবে গণনা করা।

ইউটিসি যেমন একটি তারিখ পার্স করার জন্য, একটি যোগ জেড - যেমন: new Date('2011-04-11T10:20:30Z')

ইউটিসিতে একটি তারিখ প্রদর্শন করতে .toUTCString(),
ব্যবহারকারীর স্থানীয় সময়ে একটি তারিখ প্রদর্শন করতে ব্যবহার করুন .toString()

এমডিএন সম্পর্কে আরও তথ্য | তারিখ এবং এই উত্তর

পুরাতন ইন্টারনেট এক্সপ্লোরার সামঞ্জস্যের জন্য (আইই সংস্করণ 9 কম তারিখ কন্সট্রাকটর মধ্যে ISO ফর্ম্যাটে সমর্থন করি না), আপনি এটা অংশে DATETIME স্ট্রিং উপস্থাপনা বিভক্ত করা উচিত এবং তারপর আপনি DATETIME অংশ, যেমন ব্যবহার কন্সট্রাকটর ব্যবহার করতে পারেন: new Date('2011', '04' - 1, '11', '11', '51', '00')। নোট করুন যে মাসের সংখ্যা অবশ্যই 1 কম হতে হবে।


বিকল্প পদ্ধতি - একটি উপযুক্ত গ্রন্থাগার ব্যবহার করুন:

আপনি নির্দিষ্ট মুহূর্তের সাথে পার্সিং তারিখের অনুমতি দেয় এমন লাইব্রেরি মোমেন্ট.জেগুলিও নিতে পারেন ।


পল টম্বলিন যে একই "নান" ইস্যুটি নিয়ে এসেছিল, সেই জন্য আমাকে সাফারির জন্য "বিভক্ত স্ট্রিং" পদ্ধতিটিও ব্যবহার করতে হয়েছিল। নতুন তারিখ ('2011-04-11 11:51:00') 'অবৈধ তারিখ' প্রত্যাবর্তন করবে।
আমোস

1
@ আমোস: টি অক্ষরটি লক্ষ্য করুন, যা তারিখ এবং সময়কে পৃথক করে। আপনি লিখলে new Date('2011-04-11T11:51:00')তৈরি তারিখ বৈধ।
পাভেল হোদেক

দুর্ভাগ্যক্রমে আমি এই সমস্যাটিকে ঘুরিয়ে দিয়েছি যে * এটি সমস্ত ব্যবহারকারীর পক্ষে কাজ করে না
রোমান পোদলিনভ

3
তারিখের স্ট্রিংকে পার্স করা কোনও তারিখ অবজেক্ট তৈরির সবচেয়ে খারাপ উপায়। স্ট্রিংটিকে ম্যানুয়ালি পার্স করা এবং নির্মাতা হিসাবে তারিখকে কল করা আরও ভাল। কিছু ব্রাউজারগুলি টাইমজোনকে ইউটিসি হিসাবে, অন্যকে স্থানীয় হিসাবে বিবেচনা করে না ISO
রবিজি

6
@ বেন টালিডোরোস: হ্যাঁ, এটি সমস্ত সাধারণ ব্রাউজারে new Date('1970-30-02')অবৈধ, তারিখটি অবৈধ কারণ এক বছরে ৩০ মাস নয় 30 আপনি মাসগুলি উপচে পড়তে পারবেন না তবে আপনি যখন দিনগুলি উপচে পড়েন তখন এটি ক্রম এবং ফায়ারফক্সে একটি বৈধ তারিখে সমাধান হয়: new Date('1970-02-30')তারপরে একই দিনটি নতুন তারিখ ('1970-03-02') হিসাবে একই দিন।
পাভেল হোদেক

291

দুর্ভাগ্যক্রমে আমি এটি খুঁজে পেলাম

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

"বুধ এপ্রিল 02 2014" প্রদান করে। আমি জানি এটি ক্রেজি মনে হচ্ছে, তবে এটি কিছু ব্যবহারকারীর জন্য ঘটে।

বুলেটপ্রুফ সমাধান নিম্নলিখিত হল:

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());


45
এটা সব সময়ে পাগল নয়, সমন্বয় সম্ভবত দ্বারা ঘটিত হয় ডিএসটি মধ্যে সুস্থ ও সক্রিয়। বিন্যাস তারিখ yyyy-MM-ddইউটিসি এবং পার্স করা হয় toString ফেরৎ স্থানীয় সময় তাই নির্ভর করে ব্যবহারকারীদের টাইমজোন তে এটি সবচেয়ে স্পষ্টভাবে ভিন্ন ফলাফল ফিরে আসতে পারেন। যদি সর্বদা ইউটিসি হিসাবে সময় চান তবে আপনার টুএসটিস্ট্রিং ব্যবহার করা উচিত ।
জেমস

এই এক উপর আমার মাথা ঠাপানো হয়েছে। এটি কাজ করছে বলে মনে হচ্ছে তবে আপনি কেন [0] -1 অংশ ব্যবহার করেছেন এবং কেবলমাত্র [0] অংশগুলি ব্যবহার করছেন তা আমি বুঝতে পারি না।
অ্যাডাম ইয়াংজার্স 0

4
@ অ্যাডাম ইয়ুঞ্জার্স জাভাস্ক্রিপ্টের কারণে 0: জানুয়ারী - 0, ফেব্রুয়ারি - 1 ইত্যাদি ইত্যাদি মাস গণনা করেছেন
রোমান পোডলিনভ

1
এই উত্তরটি পরামর্শ দেয় যে উদাহরণের আচরণটি ভুল। প্রতিশ্রুতি অনুসারে: বিকাশকারী.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েবে / জাভা স্ক্রিপ্ট / রেফারেন্স / ((দেখুন: ডেটস্ট্রিং) উদাহরণের আউটপুট মানটি সঠিক হবে
জেমস রস

124
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

এবং আউটপুট হবে:

dt => Date {Fri Apr 26 2013}

5
দুর্ভাগ্যক্রমে এই সমাধানটি নিয়ে একটি সমস্যা রয়েছে। এখানে বিবরণ: stackoverflow.com/questions/17959660/...
রোমান Podlinov

আউটপুটটি অজানা, কারণ আপনার কোডটি কোনও কিছুকেই স্ট্রিংতে রূপান্তরিত করে না বা কিছুই আউটপুট দেয় না।
রবার্ট সিমার

81
function stringToDate(_date,_format,_delimiter)
{
            var formatLowerCase=_format.toLowerCase();
            var formatItems=formatLowerCase.split(_delimiter);
            var dateItems=_date.split(_delimiter);
            var monthIndex=formatItems.indexOf("mm");
            var dayIndex=formatItems.indexOf("dd");
            var yearIndex=formatItems.indexOf("yyyy");
            var month=parseInt(dateItems[monthIndex]);
            month-=1;
            var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
            return formatedDate;
}

stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")

3
কেবল মার্কিন ফর্ম্যাটিং নয় প্রতিটি প্রকারের তারিখগুলি পরিচালনা করে
মার্ক জোন্স ২

4
@ মারকজোনস .indexOf()পদ্ধতিটিতে বিশ্বাস করবেন না কারণ এটি পলিফিল ছাড়া ক্রস ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ নয়। পরিবর্তে, আরও সুসংগত .match()বা .test()ভ্যানিলা জেএস পদ্ধতি ব্যবহার করুন।
আলেকজান্ডার ডিকসন

1
var _delimiter = _format.match(/\W/g)[0];ফাংশনের শুরুতে যুক্ত করে আপনি স্বয়ংক্রিয়ভাবে ডিলিমিটার পেতে এবং 3 য় প্যারামিটারের প্রেসক্রিন্ড পেতে পারেন।
ক্যাম্পস জোস

39

moment.js ( http://momentjs.com/ ) ব্যবহারের তারিখগুলির জন্য একটি সম্পূর্ণ এবং ভাল প্যাকেজ এবং আইএসও 8601 স্ট্রিং সমর্থন করে

আপনি একটি স্ট্রিংয়ের তারিখ এবং ফর্ম্যাট যুক্ত করতে পারেন।

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

এবং আপনি কোনও তারিখ বৈধ কিনা তা পরীক্ষা করতে পারেন।

moment("not a real date").isValid(); //Returns false

কিছু প্রদর্শন উদাহরণ

let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL')) 
// output: "3 months ago | February 1, 2019"

ডকুমেন্টেশন দেখুন http://momentjs.com/docs/#/parsing/string-format/

প্রস্তাবনা: আমি তারিখগুলির জন্য একটি প্যাকেজ ব্যবহার করার পরামর্শ দিচ্ছি যাতে প্রচুর ফর্ম্যাট থাকে কারণ সময় অঞ্চল এবং বিন্যাসের সময় ব্যবস্থাপনাই সত্যিই একটি বড় সমস্যা, মুহূর্তের জেএস প্রচুর ফর্ম্যাট সমাধান করে। আপনি একটি সাধারণ স্ট্রিং থেকে তারিখের মধ্যে সহজেই তারিখটিকে পার্স করতে পারেন তবে আমার মনে হয় যে সমস্ত ফর্ম্যাট এবং তারিখের বৈচিত্রগুলি সমর্থন করার জন্য এটি কঠোর কাজ।


1
কিছু প্রদর্শন উদাহরণ প্রদর্শন করে let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL')) : "3 মাস আগে | 1 ফেব্রুয়ারী, 2019"
সিপিএইচপিথন

36

তারিখের কাছে এটি একটি আর্গুমেন্ট হিসাবে পাস করুন:

var st = "date in some format"
var dt = new Date(st);

আপনি তারিখ, মাস, বছর, ব্যবহার উদাহরণস্বরূপ অ্যাক্সেস করতে পারে: dt.getMonth()


8
আমি করি console.log(new Date('30-08-2018'))এবং অবৈধ তারিখটি
পাই

এই উত্তরটি এই সমস্যায় একাধিক জটিলতা উপেক্ষা করে, উদাহরণস্বরূপ, আমি যদি 01/02/2020আমার কম্পিউটারে (ইউকেতে) একটি তারিখের জন্য এটি করি তবে এটি 1 ফেব্রুয়ারি ফিরে আসবে যেখানে মার্কিন যুক্তরাষ্ট্রে একই জিনিসটি করা হলে এটি 2 শে জানুয়ারিতে ফিরে আসবে। আপনার এই চমকপ্রদ বাস্তবায়ন কখনও ব্যবহার করা উচিত নয়। ব্যবহার করুন মুহূর্ত পরিবর্তে।
লিয়াম

23

আপনি যদি ভয়ঙ্কর মুহুর্তের গ্রন্থাগারটি ব্যবহার করতে পারেন (যেমন কোনও নোড.জেএস প্রকল্পে) আপনি সহজেই উদাহরণস্বরূপ আপনার তারিখটি পার্স করতে পারেন

var momentDate = moment("2014-09-15 09:00:00");

এবং এর মাধ্যমে জেএস তারিখ অবজেক্টটি অ্যাক্সেস করতে পারে

momentDate ().toDate();

5
দয়া করে নোট করুন যে মুহুর্তটি নোড ছাড়াই ঠিক কাজ করে
শাহির

এই কোডটি ব্যবহার করার সময় আমি আমার অ্যান্ড্রয়েড এবং আইওএস ডিভাইসগুলিতে NaN ত্রুটি পেয়েছি, তবে এটি ডেস্কটপে কাজ করছে। এখানে আমি আগে ব্যবহার করা কোডটি এখানে রয়েছে: var তারিখের সময়কালীন টাইমআইএন = নতুন তারিখ (বছর + "-" + মাস + "-" + দিন + "টি" + ডেটা.টাইম); এই পদ্ধতির এবং মুহুর্তের লাইব্রেরিটি ব্যবহার করে, আমার সমস্যাটি সমাধান হয়ে গেছে এবং আমার কোড এখন আমার সমস্ত ডিভাইসে দুর্দান্ত কাজ করছে!
মেহেদী

20

new Date(2000, 10, 1) আপনাকে "বুধ নভেম্বর 01000 00:00:00 GMT + 0100 (সিইটি)" দেবে

দেখুন যে মাসে 0 আপনাকে জানুয়ারী দেয়


19

যারা একটি ক্ষুদ্র ও স্মার্ট সমাধান খুঁজছেন তাদের জন্য:

String.prototype.toDate = function(format)
{
  var normalized      = this.replace(/[^a-zA-Z0-9]/g, '-');
  var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
  var formatItems     = normalizedFormat.split('-');
  var dateItems       = normalized.split('-');

  var monthIndex  = formatItems.indexOf("mm");
  var dayIndex    = formatItems.indexOf("dd");
  var yearIndex   = formatItems.indexOf("yyyy");
  var hourIndex     = formatItems.indexOf("hh");
  var minutesIndex  = formatItems.indexOf("ii");
  var secondsIndex  = formatItems.indexOf("ss");

  var today = new Date();

  var year  = yearIndex>-1  ? dateItems[yearIndex]    : today.getFullYear();
  var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
  var day   = dayIndex>-1   ? dateItems[dayIndex]     : today.getDate();

  var hour    = hourIndex>-1      ? dateItems[hourIndex]    : today.getHours();
  var minute  = minutesIndex>-1   ? dateItems[minutesIndex] : today.getMinutes();
  var second  = secondsIndex>-1   ? dateItems[secondsIndex] : today.getSeconds();

  return new Date(year,month,day,hour,minute,second);
};

উদাহরণ:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");

একটি যাদুমন্ত্র মত কাজ করে! তুমি আমার জীবন বাঁচিয়েছ!
স্টিভ নস


12

আপনি যদি "dd / MM / yyyy" ফর্ম্যাট থেকে রূপান্তর করতে চান। এখানে একটি উদাহরণ:

var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var arrayDate = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);

এই সমাধানটি 9 এরও কম IE সংস্করণে কাজ করে।


12

টাইমস্ট্যাম্পগুলি একটি সংখ্যায় কাস্ট করা উচিত

var ts = '1471793029764';
ts = Number(ts); // cast it to a Number
var date = new Date(ts); // works

var invalidDate = new Date('1471793029764'); // does not work. Invalid Date

1
undefinedমূল্য সম্পর্কে কি ? ভালো লেগেছে: var date = new Date(undefined)?
বেনি নিউজবাউয়ার 14

@ বেনিনিউজবাউর ভাল করে পরীক্ষা করে দেখুন যে আপনি তারিখ নির্মাতার কাছে দেওয়ার চেষ্টা করার আগে কোনও মান অপরিবর্তিত আছে কিনা। হতে পারে আপনি কোনও ব্যতিক্রম ছুঁড়ে ফেলতে চান বা সম্ভবত আপনি কোনও ডিফল্ট তারিখে ফ্যালব্যাক পেতে চান, কে জানে?
ভাগ্যবান সনি

9

Date.parseআপনি যা চান তা প্রায় পেয়ে যায়। এটি am/ pmঅংশে চাপ দেয় তবে কিছু হ্যাকিংয়ের সাহায্যে আপনি এটি কাজে লাগাতে পারেন:

var str = 'Sun Apr 25, 2010 3:30pm',
    timestamp;

timestamp = Date.parse(str.replace(/[ap]m$/i, ''));

if(str.match(/pm$/i) >= 0) {
    timestamp += 12 * 60 * 60 * 1000;
}

6

পিটি-বিআর ফরমেটে রূপান্তর করুন:

    var dateString = "13/10/2014";
    var dataSplit = dateString.split('/');
    var dateConverted;

    if (dataSplit[2].split(" ").length > 1) {

        var hora = dataSplit[2].split(" ")[1].split(':');
        dataSplit[2] = dataSplit[2].split(" ")[0];
        dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]);

    } else {
        dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]);
    }

আমি কাউকে সাহায্য আশা করি !!!


5

আমি এটির জন্য একটি ফ্রিডল তৈরি করেছি, আপনি যে কোনও তারিখের স্ট্রিংয়ে toDate () ফাংশন ব্যবহার করতে পারেন এবং তারিখের ফর্ম্যাটটি সরবরাহ করতে পারেন। এটি আপনাকে একটি তারিখ অবজেক্ট ফিরিয়ে দেবে। https://jsfiddle.net/Sushil231088/q56yd0rp/

"17/9/2014".toDate("dd/MM/yyyy", "/")

4

জেএসে আমি আজ থেকে স্ট্রিংটি রূপান্তর করার জন্য http://momentjs.com/

moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm
moment().format('dddd');                    // Sunday
moment().format("MMM Do YY");               // Aug 16th 15
moment().format('YYYY [escaped] YYYY');     // 2015 escaped 2015
moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 16 hours ago
moment().endOf('day').fromNow();          // in 8 hours

1
মুহূর্ত () ডিফল্ট হিসাবে বর্তমান তারিখ নেয়। মুহূর্তটি ব্যবহার করে "2016-06-27 17: 49: 51.951602 + 05: 30" ফর্ম্যাটে যে স্ট্রিংটি ফর্ম্যাট করবেন।
Zoran777

4

যে কোনও তারিখের অবজেক্টটিকে একটি ইউটিসি তারিখের সাথে রূপান্তর করতে আমি এই ফাংশনটি তৈরি করেছি made

function dateToUTC(date) {
    return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}


dateToUTC(new Date());

3

এটি করার আরেকটি উপায়:

String.prototype.toDate = function(format) {
    format = format || "dmy";
    var separator = this.match(/[^0-9]/)[0];
    var components = this.split(separator);
    var day, month, year;
    for (var key in format) {
        var fmt_value = format[key];
        var value = components[key];
        switch (fmt_value) {
            case "d":
                day = parseInt(value);
                break;
            case "m":
                month = parseInt(value)-1;
                break;
            case "y":
                year = parseInt(value);
        }
    }
    return new Date(year, month, day);
};
a = "3/2/2017";
console.log(a.toDate("dmy"));
// Date 2017-02-03T00:00:00.000Z

আহ! ঝরঝরে! অবশেষে একটি কোড যা পৃথক পৃথক পৃথক ব্যবহৃত হয় তা যত্ন করে।
স্যাম সিরি

3

আপনি এটি চেষ্টা করতে পারেন:

function formatDate(userDOB) {
  const dob = new Date(userDOB);

  const monthNames = [
    'January', 'February', 'March', 'April', 'May', 'June', 'July',
     'August', 'September', 'October', 'November', 'December'
  ];

  const day = dob.getDate();
  const monthIndex = dob.getMonth();
  const year = dob.getFullYear();

  // return day + ' ' + monthNames[monthIndex] + ' ' + year;
  return `${day} ${monthNames[monthIndex]} ${year}`;
}

console.log(formatDate('1982-08-10'));


2
var date = new Date(year, month, day);

অথবা

var date = new Date('01/01/1970');

'01 -01-1970 'ফর্ম্যাটে তারিখের স্ট্রিং ফায়ারফক্সে কাজ করবে না, সুতরাং তারিখ বিন্যাসের স্ট্রিংয়ে "-" পরিবর্তে "/" ব্যবহার করুন।


আমার স্ট্রিংটি "2015/08/03 13:06:16" এফএফ-তে স্ট্রিল কাজ করছে না
ধারা

2

তারিখ বিন্যাসে রূপান্তরিত করার আগে যদি আপনার স্ট্রিংয়ের বিষয়বস্তুগুলি পরীক্ষা করতে হয়:

// Convert 'M/D/YY' to Date()
mdyToDate = function(mdy) {
  var d = mdy.split(/[\/\-\.]/, 3);

  if (d.length != 3) return null;

  // Check if date is valid
  var mon = parseInt(d[0]), 
      day = parseInt(d[1]),
      year= parseInt(d[2]);
  if (d[2].length == 2) year += 2000;
  if (day <= 31 && mon <= 12 && year >= 2015)
    return new Date(year, mon - 1, day);

  return null; 
}

2

আমি স্ট্রিংটিকে ডেট অবজেক্টে রূপান্তর করতে পার্সেডেটটাইম ফাংশন তৈরি করেছি এবং এটি সমস্ত ব্রাউজারে (আই ব্রাউজার সহ) কাজ করছে, কারও প্রয়োজন কিনা তা পরীক্ষা করে দেখুন, https://github.com/Umesh-Markande/Parse-String-to- তারিখ ইন সব-ব্রাউজার

    function parseDateTime(datetime) {
            var monthNames = [
                "January", "February", "March",
                "April", "May", "June", "July",
                "August", "September", "October",
                "November", "December"
              ];
            if(datetime.split(' ').length == 3){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1].replace('.00','');
                var timearray = time.split(':');
                var hours = parseInt(time.split(':')[0]);
                var format = datetime.split(' ')[2];
                var bits = date.split(/\D/);
                date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = date.getDate();
                var monthIndex = date.getMonth();
                var year = date.getFullYear();
                if ((format === 'PM' || format === 'pm') && hours !== 12) {
                    hours += 12;
                    try{  time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] }
                } 
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime.split(' ').length == 2){
                var date = datetime.split(' ')[0];
                var time = datetime.split(' ')[1];
                var bits = date.split(/\D/);
                var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                var day = datetimevalue.getDate();
                var monthIndex = datetimevalue.getMonth();
                var year = datetimevalue.getFullYear();
                var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                return formateddatetime;
            }else if(datetime != ''){
                var bits = datetime.split(/\D/);
                var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                return date;
            }
            return datetime;
        }

    var date1 = '2018-05-14 05:04:22 AM';   // yyyy-mm-dd hh:mm:ss A
    var date2 = '2018/05/14 05:04:22 AM';   // yyyy/mm/dd hh:mm:ss A
    var date3 = '2018/05/04';   // yyyy/mm/dd
    var date4 = '2018-05-04';   // yyyy-mm-dd
    var date5 = '2018-05-14 15:04:22';   // yyyy-mm-dd HH:mm:ss
    var date6 = '2018/05/14 14:04:22';   // yyyy/mm/dd HH:mm:ss

    console.log(parseDateTime(date1))
    console.log(parseDateTime(date2))
    console.log(parseDateTime(date3))
    console.log(parseDateTime(date4))
    console.log(parseDateTime(date5))
    console.log(parseDateTime(date6))

**Output---**
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time)

এই আমার জন্য কাজ করে। ধন্যবাদ.
ক্রিস ডি এমারসন

2

এই উত্তরটি কাসেমের উত্তরের উপর ভিত্তি করে তবে এটি দুই-অঙ্কের বছরও পরিচালনা করে। আমি কাসেমের উত্তরে একটি সম্পাদনা জমা দিয়েছি, তবে এটি অনুমোদিত না হলে, আমি পৃথক উত্তর হিসাবে এটিও জমা দিচ্ছি।

function stringToDate(_date,_format,_delimiter) {
        var formatLowerCase=_format.toLowerCase();
        var formatItems=formatLowerCase.split(_delimiter);
        var dateItems=_date.split(_delimiter);
        var monthIndex=formatItems.indexOf("mm");
        var dayIndex=formatItems.indexOf("dd");
        var yearIndex=formatItems.indexOf("yyyy");
        var year = parseInt(dateItems[yearIndex]); 
        // adjust for 2 digit year
        if (year < 100) { year += 2000; }
        var month=parseInt(dateItems[monthIndex]);
        month-=1;
        var formatedDate = new Date(year,month,dateItems[dayIndex]);
        return formatedDate;
}

stringToDate("17/9/14","dd/MM/yyyy","/");
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")

1

আপনি রেগেক্সকে স্ট্রিংকে বিশদ সময় পার্স করতে ব্যবহার করতে পারেন তারপরে তারিখ বা যেকোন রিটার্ন ফর্ম্যাট তৈরি করতে পারেন:

//example : let dateString = "2018-08-17 01:02:03.4"

function strToDate(dateString){
    let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/
  , [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds);
  return dateObject;
}
alert(strToDate(dateString));

1

কর্মক্ষমতা

আজ (2020.05.08) আমি নির্বাচিত সমাধানগুলির জন্য পরীক্ষাগুলি সম্পাদন করি - দুটি ক্ষেত্রে: ইনপুট তারিখটি আইএসও 8601 স্ট্রিং (বিজ্ঞাপন, বিডি, সিডি, ডিডি, এডি) এবং ইনপুট তারিখ টাইমস্ট্যাম্প (এট, সিটি, ডিটি)। সমাধান বিডি, সিডি, সিটি জেএস তারিখের অবজেক্টকে ফলাফল হিসাবে ফিরিয়ে দেয় না, তবে আমি তাদের যুক্ত করি কারণ তারা কার্যকর হতে পারে তবে আমি তাদের বৈধ সমাধানের সাথে তুলনা করি না। এই ফলাফলগুলি বিশাল তারিখ পার্সিংয়ের জন্য কার্যকর হতে পারে।

উপসংহার

  • সলিউশন new Date(বিজ্ঞাপন) আইএসও তারিখ এবং টাইমস্ট্যাম্পের জন্য সমস্ত ব্রাউজারের জন্য moment.js (Dd) এর চেয়ে 50-100x দ্রুত
  • সলিউশন new Date(বিজ্ঞাপন) 10 ডলার দ্রুত parseDate(এডি) এর চেয়ে দ্রুত
  • Date.parseসকল ব্রাউজারে আইএসও তারিখ থেকে টাইমস্ট্যাম্পের জন্য যদি উইডের প্রয়োজন হয় তবে সলিউশন (বিডি) দ্রুততম

এখানে চিত্র বর্ণনা লিখুন

বিস্তারিত

আমি ক্রোম 81.0, সাফারি 13.1, ফায়ারফক্স 75.0 এ ম্যাকওস হাই সিয়েরা 10.13.6 তে পরীক্ষা করি। সমাধান parseDate(এড) ব্যবহার new Date(0)এবং ম্যানুয়ালি ইউটিসি তারিখের উপাদানগুলি সেট করে।

ক্রোমের জন্য ফলাফল

এখানে চিত্র বর্ণনা লিখুন


0

আইএসও 8601-এস্কে ডেটস্ট্রিংস, স্ট্যান্ডার্ড হিসাবে দুর্দান্ত, এখনও ব্যাপকভাবে সমর্থিত নয়।

আপনার কোন ডেটস্ট্রিং ফর্ম্যাটটি ব্যবহার করা উচিত তা নির্ধারণ করার জন্য এটি একটি দুর্দান্ত উত্স:

http://dygraphs.com/date-formats.html

হ্যাঁ, এর অর্থ হল যে আপনার তারিখের স্ট্রিংটি তার বিপরীতে যতটা সহজ হতে পারে

"2014/10/13 23:57:52" পরিবর্তে "2014-10-13 23:57:52"


0
                //little bit of code for Converting dates 

                var dat1 = document.getElementById('inputDate').value;
                var date1 = new Date(dat1)//converts string to date object
                alert(date1);
                var dat2 = document.getElementById('inputFinishDate').value;
                var date2 = new Date(dat2)
                alert(date2);

0

এই কোডটি ব্যবহার করুন: (আমার সমস্যাটি এই কোড দিয়ে সমাধান করা হয়েছিল)

function dateDiff(date1, date2){
var diff = {}                           // Initialisation du retour
var tmp = date2 - date1;

tmp = Math.floor(tmp/1000);             // Nombre de secondes entre les 2 dates
diff.sec = tmp % 60;                    // Extraction du nombre de secondes

tmp = Math.floor((tmp-diff.sec)/60);    // Nombre de minutes (partie entière)
diff.min = tmp % 60;                    // Extraction du nombre de minutes

tmp = Math.floor((tmp-diff.min)/60);    // Nombre d'heures (entières)
diff.hour = tmp % 24;                   // Extraction du nombre d'heures

tmp = Math.floor((tmp-diff.hour)/24);   // Nombre de jours restants
diff.day = tmp;

return diff;

}


3
দয়া করে আপনার উত্তরটি ব্যাখ্যা করুন
মেজ

তারিখ 1 এবং তারিখ 2 প্যারামিটারগুলির সঠিক তারিখ হিসাবে ফর্ম্যাট থাকতে হবে।
ফেট্রা

ভিন্ন ফাংশন ফেরতের তারিখ আপনি যদি দিনের সংখ্যাটি চান ঠিক তেমনটি করতে চান: var ফলাফল = ডেটডিফ (তারিখ 1, তারিখ 2); var day_number = ফলাফল.day; এটি সহজ
ফেট্রা

0

আমি একটি পুনরায় ব্যবহারযোগ্য ফাংশন লিখেছিলাম যা আমি যখন সার্ভার থেকে তারিখ স্ট্রিংগুলি পাই তখন আমি ব্যবহার করি। পদ্ধতিটি
ব্যবহারের জন্য আপনি আপনার পছন্দসই ডিলিমিটার (/ - ইত্যাদি ..) পাস করতে পারেন যা দিন এবং বছরকে পৃথক করে split()
আপনি এই কার্যকারী উদাহরণে এটি দেখতে ও পরীক্ষা করতে পারেন ।

<!DOCTYPE html>
<html>
  <head>
    <style>
    </style>
  </head>
  <body>
    <div>
      <span>day:
      </span> 
      <span id='day'>
      </span>
    </div>
    <div>
      <span>month:
      </span> 
      <span id='month'>
      </span>
    </div>
    <div>
      <span>year:
      </span> 
      <span id='year'>
      </span>
    </div>
    <br/>
    <input type="button" id="" value="convert" onClick="convert('/','28/10/1980')"/>
    <span>28/10/1980
    </span>
    <script>
      function convert(delimiter,dateString)
      {
        var splitted = dateString.split('/');
        // create a new date from the splitted string 
        var myDate = new Date(splitted[2],splitted[1],splitted[0]);
        // now you can access the Date and use its methods 
        document.getElementById('day').innerHTML = myDate.getDate();
        document.getElementById('month').innerHTML = myDate.getMonth();
        document.getElementById('year').innerHTML = myDate.getFullYear();
      }
    </script>
  </body>
</html>

0

এটি করার আরেকটি উপায় হ'ল নামকৃত ক্যাপচার গ্রুপগুলির সাথে ফর্ম্যাট স্ট্রিংয়ের উপরে একটি রেজিেক্স তৈরি করা এবং তারপরে তারিখের স্ট্রিং থেকে দিন, মাস এবং বছর বের করার জন্য সেই রেজেক্সটি ব্যবহার করুন:

function parseDate(dateStr, format) {
  const regex = format.toLocaleLowerCase()
    .replace(/\bd+\b/, '(?<day>\\d+)')
    .replace(/\bm+\b/, '(?<month>\\d+)')
    .replace(/\by+\b/, '(?<year>\\d+)')
  
  const parts = new RegExp(regex).exec(dateStr) || {};
  const { year, month, day } = parts.groups || {};
  return parts.length === 4 ? new Date(year, month-1, day) : undefined;
}

const printDate = x => console.log(x ? x.toLocaleDateString() : x);

printDate(parseDate('05/11/1896', 'dd/mm/YYYY'));
printDate(parseDate('07-12-2000', 'dd-mm-yy'));
printDate(parseDate('07:12:2000', 'dd:mm:yy'));
printDate(parseDate('2017/6/3', 'yy/MM/dd'));
printDate(parseDate('2017-6-15', 'y-m-d'));
printDate(parseDate('2015 6 25', 'y m d'));
printDate(parseDate('2015625', 'y m d')); // bad format


চমৎকার সমাধান, কিন্তু আপনি হয়তো জেনে রাখুন যে ফায়ারফক্স এখনও RegExp নামে গ্রুপ সমর্থন করে না হয় না - bugzilla.mozilla.org/show_bug.cgi?id=1362154 : (দ্রষ্টব্য এটা আমি নই যারা আপনার উত্তর downvoted থাকবে)
qdev
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.