আমি কীভাবে একটি আইএসও 8601 moment.js এ তারিখ ফর্ম্যাট করব?


201

এই দস্তাবেজগুলি moment.ISO_8601বিন্যাসকরণ বিকল্প হিসাবে উল্লেখ করেছে (২.7.০ থেকে - http://momentjs.com/docs/#/parsing/spected-formats/ ), তবে এই কাজের কোনওটিই (এমনকি 2.7.0):

var date = moment();
date.format(moment.ISO_8601); // error
moment.format(date, moment.ISO_8601); // error

( http://jsfiddle.net/b3d6uy05/1/ )

আমি moment.js থেকে কীভাবে একটি আইএসও 8601 পেতে পারি?


আপনি মুহুর্তের কোন সংস্করণ ব্যবহার করছেন? ডক্স বলছে যে ধ্রুবকটি 2.7.0 এ যুক্ত হয়েছিল।
জোবস

@ জোয়েজ ২.7.০। প্রশ্নে স্পষ্ট। আমার উত্তর দেখুন আমি এটি সন্ধান। দস্তাবেজগুলি যদিও খুব স্পষ্ট নয়।
সিনিট

হ্যাঁ, তারা কেবল বিশ্লেষণের প্রসঙ্গে বিশেষ ফর্ম্যাটগুলির উল্লেখ করেছেন। অস্বাভাবিক.
জোবস

2
আপনি চেষ্টা করতে পারেনmoment().toISOString()
সহিথিয়ান ভগ্নেশ্বরান

উত্তর:


339
moment().toISOString(); // or format() - see below

http://momentjs.com/docs/#/displaying/as-iso-string/

আপডেট উত্তরের উপর ভিত্তি করে: @ এসনেট দ্বারা এবং @dvlsg এর মন্তব্য (দেখুন) ফিডল দেখুন ) এটি লক্ষ করা উচিত যে formatএবং এর মধ্যে পার্থক্য রয়েছে toISOString। উভয়ই সঠিক তবে অন্তর্নিহিত প্রক্রিয়া পৃথক। toISOStringতারিখ অবজেক্টে রূপান্তরিত হয়, ইউটিসিতে সেট হয় তারপরে ইউটিসি-তে মিলিসেকেন্ড ( YYYY-MM-DD[T]HH:mm:ss.SSS[Z]) সহ ISO8601 আউটপুট দেওয়ার জন্য দেশীয় তারিখ প্রোটোটাইপ ফাংশনটি ব্যবহার করে । অন্যদিকে, মিলিসেকেন্ড ছাড়াই formatডিফল্ট ফর্ম্যাট ( YYYY-MM-DDTHH:mm:ssZ) ব্যবহার করে এবং টাইমজোন অফসেট বজায় রাখে।

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


1
আমি আপনার সাথে @ যিশুয়া একমত আমি মনে করি "বিন্যাস ()" এর ব্যবহার এড়ানো উচিত কারণ স্বজ্ঞাত নয়। এছাড়াও আমি মনে করি না যে এমন কোনও ফাংশন যা কেবল নেটিভ "টোআইএসএসটিং ()" কে আবৃত করে সেখানে থাকা উচিত। বলা হচ্ছে, সম্ভবত একটি নতুন ফাংশন দেওয়া যেমন: "toISO8601 ()" টাইমজোন রাখার বিকল্প এবং একটি সঠিক ডকুমেন্টেশন আরও ভাল হবে।
গ্রিভিন লোপেজ

4
আপনি যদি পুরো সময়টি চান তবে আপনার নিজের পদ্ধতিতে ISO8601 এর পরিবর্তে ফর্ম্যাট করে, আপনি নিম্নলিখিতটি করতে পারেন:moment().utc().format("OUTPUT_FORMAT")
স্টিংকিগেট

কিবাণায় একটি তারিখ গঠনের জন্য দরকারী তবে আপনার জেএসে অ্যাক্সেস নেই।
ব্রাইস

1
আপনি যদি স্থানীয় সময় অঞ্চল বজায় রাখতে চান তবে ব্যবহার করুন moment().toISOString(true);
বেনি নিউজবাউয়ার 19

81

formatকোনও পরামিতি ছাড়াই ব্যবহার করুন :

var date = moment();
date.format(); // "2014-09-08T08:02:17-05:00"

( http://jsfiddle.net/8gvhL1dz/ )


31
পার্শ্ব নোট হিসাবে, এই দুটি উত্তর এক নয়, যদিও তারা উভয়ই আইএসও বিন্যাসের প্রয়োজনীয়তা পূরণ করে। date.toISOString()মিলিসেকেন্ডগুলি রাখবে এবং ইউটিসি ব্যবহার date.format()করবে, মিলিসেকেন্ডগুলি ড্রপ করবে এবং আপনার স্থানীয় সময় অঞ্চলটি ব্যবহার করবে (বা কমপক্ষে, আমি বর্তমানে ক্রোমে আছি এমন আচরণ - jsfiddle.net/8gvhL1dz/22 )
dvlsg

আরবি লোকেলের সাহায্যে। ফর্ম্যাট () ব্যবহার করা ইংরেজী পরিবর্তে আরবি প্রতীকগুলিতে নিয়ে যায় যা সম্ভবত অনাকাঙ্ক্ষিত।
ব্যবহারকারী 39323274

টোআইএসএসটিং আপনার স্থানীয় সময় অঞ্চলে আউটপুট দেয় না - এটি সর্বদা (শূন্য অফসেট) ইউটিসি-তে থাকে।
জোটাইডি

11

ভ্যানিলা জেএস দিয়েও সম্ভব

new Date().toISOString() // "2017-08-26T16:31:02.349Z"

3
টাইমজোনটি বজায় না রেখে কেবল আপনি যদি এটি ইউটিসি-তে চান।
জোটাইডি

8

মংগোডিবিতে খেজুর সংরক্ষণের জন্য আপনি যখন মঙ্গুজ ব্যবহার করেন তখন আপনাকে আইসএসটিস্ট্রিং () ব্যবহার করতে হবে কারণ সমস্ত তারিখ মিলিসেকেন্ড সহ আইএসও তারিখ হিসাবে সঞ্চিত থাকে।

moment.format() 

2018-04-17T20:00:00Z

moment.toISOString() -> USE THIS TO STORE IN MONGOOSE

2018-04-17T20:00:00.000Z

3

যদি আপনি কেবল তারিখের অংশটি চান (উদাহরণস্বরূপ 2017-06-27), এবং আপনি সময় অঞ্চল এবং আরবিতে নির্বিশেষে এটি কাজ করতে চান তবে আমি কোড লিখেছি:

function isoDate(date) {
    if (!date) {
        return null
    }
    date = moment(date).toDate()

    // don't call toISOString because it takes the time zone into
    // account which we don't want.  Also don't call .format() because it
    // returns Arabic instead of English

    var month = 1 + date.getMonth()
    if (month < 10) {
        month = '0' + month
    }
    var day = date.getDate()
    if (day < 10) {
        day = '0' + day
    }
    return date.getFullYear() + '-' + month + '-' + day
}

0
var x = moment();

//date.format(moment.ISO_8601); // error

moment("2010-01-01T05:06:07", ["YYYY", moment.ISO_8601]);; // error
document.write(x);

2
যদিও এই কোডটি প্রশ্নের সমাধান দিতে পারে, কেন / কীভাবে এটি কাজ করে তা প্রসঙ্গে যুক্ত করা ভাল। এটি ভবিষ্যতের ব্যবহারকারীদের শিখতে এবং তাদের নিজস্ব কোডটিতে এই জ্ঞানটি প্রয়োগ করতে সহায়তা করতে পারে। কোডটি ব্যাখ্যা করা হলে আপনিও upvotes আকারে ব্যবহারকারীদের কাছ থেকে ইতিবাচক প্রতিক্রিয়া জানাতে পারেন।
borchvm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.