Moment.js তারিখের অবজেক্টে রূপান্তরিত করে


695

মোমেন্ট.জেএস ব্যবহার করে আমি সময়ক্ষেত্রের সাথে ডেট অবজেক্টে একটি সঠিক মুহূর্ত অবজেক্টকে রূপান্তর করতে পারি না। আমি সঠিক তারিখ পেতে পারি না।

উদাহরণ:

var oldDate = new Date(),
    momentObj = moment(oldDate).tz("MST7MDT"),
    newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())

1
আপনি কোন আউটপুট আশা করবেন এবং কোন আউটপুট পাবেন?
ফেলিক্স ক্লিং

4
4 সারি আমাকে এত আউটপুট পান: <কোড> (তারিখ অবজেক্ট) অফসেট সহ সময় Thu 01 আগস্ট 2013 15:23:49 GMT + 0300 (Финляндия (лето)) </code> তবে টাইমজোন এমএসটি 7 এমডিটি হতে হবে
ভাদিম.জিলটসভ

Wednesday 24th 2019, 12:47:48 amএটা 2019-04-23T19:17:48.000Z কি রূপান্তর করা সম্ভব ? @ ভাদিম.জিল্টসভ
অনুপম

তারিখের অবজেক্টগুলির কোনও টাইমজোন নেই, সেগুলি কেবল 1970-01-01T00: 00: 00Z থেকে অফসেট। সুতরাং আপনি যখন ডেটকে কল করবেন , প্রত্যাবর্তিত অবজেক্টটি আপনার সাথে মুহুর্তের অবজেক্টের সাথে সংযুক্ত টাইমজোন তথ্যটি হারিয়ে ফেলেছে .tz("MST7MDT")। এই কারণেই মুহুর্ত.tz এর মতো লাইব্রেরিগুলি বিদ্যমান তারিখের অবজেক্টের খালি হাড়ের সক্ষমতা পরিপূরক করার জন্য যা কেবলমাত্র ইউটিসি এবং হোস্ট টাইমজোনকে বোঝে, এটাই।
রবজি

উত্তর:


1231

একটি মুহুর্তের অবজেক্টটিকে একটি তারিখের অবজেক্টে রূপান্তর করতে এটি ব্যবহার করুন:

Http://momentjs.com/docs/#/displaying/as-javascript-date/ থেকে

moment().toDate();

উৎপাদনের:

Tue Nov 04 2014 14:04:01 GMT-0600 (CST)

11
@ স্পেন্সার - হ্যাঁ, এটি শিরোনামের উত্তর দেয়, এবং toDateআসলে কীভাবে একটি Dateথেকে কোনও জিনিস পাওয়া যায় moment। তবে প্রশ্নের মূল অংশের কোডটি সময় অঞ্চল রূপান্তর সম্পর্কে জিজ্ঞাসা করে - যা Dateকরতে পারে না। যদি না মাউন্টেন সময় প্রকৃতপক্ষে ব্যবহারকারীর সময় অঞ্চল হয় তবে আমি নিশ্চিত নই যে এটি কীভাবে প্রশ্নের উত্তর দিয়েছে।
ম্যাট জনসন-পিন্ট

1
@ ম্যাটটি কেবলমাত্র আপনি যে প্রশ্নের দিকে তাকিয়ে আছেন তার উপর নির্ভর করে। বেশিরভাগ লোকেরা গুগল অনুসন্ধান করেন এবং দেখুন যে এই শিরোনামটি তাদের প্রশ্নের সাথে মিলিয়েছে এবং প্রশ্নের উত্তর নয়, যা শিরোনামের জবাব দেয়, প্রশ্নের মূল অংশ নয়। এটি ব্যাখ্যা করতে পারে কেন এটি কেন সবচেয়ে বেশি আপত্তি রাখে যদিও এটি প্রযুক্তিগতভাবে ওপিকে সহায়তা করে না।
স্পেন্সার

14
এটি কি আসলে সঠিক উত্তর? প্রশ্নটি ছিল কীভাবে মুহূর্তের অবজেক্টটিকে জাভাস্ক্রিপ্টের তারিখে রূপান্তর করা যায় তবে টাইমজোন দিয়ে। জাভাস্ক্রিপ্টের তারিখের অবজেক্টে পরিবর্তিত হওয়ার পরে এটি স্থানীয় সময় অঞ্চলটিতে ফিরে আসে।
অবর্ণনীয়

1
আরে ছেলেরা এই লিঙ্কটি momentjs.com/guides/#/warnings/js- তারিখটি পরীক্ষা করে দেখুন । এটি নিরুৎসাহিত করা হয়েছে এবং আসন্ন বড় রিলিজে এটি সরানো হবে।
gtzinos

3
@gtzinos আপনি যা লিঙ্ক করছেন এবং উল্লেখ করছেন তা একটি পৃথক সমস্যা এবং দৃশ্যের উদাহরণস্বরূপ, মুহুর্তের কনস্ট্রাক্টরের একটি স্ট্রিং পাস করা moment("12/12/2011")যেখানে আপনি সেই বার্তাটি পাবেন। মুহুর্ত থেকে তারিখ moment().toDate()
আপজে

51

আপনি যে অঞ্চলগুলি চান তার ডেটা সহ মুহুর্ত-সময় অঞ্চলটি যতক্ষণ না শুরু করবেন ততক্ষণ আপনার কোড প্রত্যাশার মতো কাজ করে।

আপনি মুহূর্তটিকে সঠিকভাবে সময় অঞ্চলে রূপান্তর করছেন যা থেকে আউটপুটের দ্বিতীয় লাইনে প্রতিফলিত হয় momentObj.format()

ইউটিসিতে স্যুইচ করা কেবল অফসেটটি ফেলে দেয় না, এটি ইউটিসি সময় অঞ্চলে ফিরে আসে। আপনি যদি এটি করতে যাচ্ছেন তবে আপনার আসল .tz()কল করার দরকার নেই । আপনি ঠিক করতে পারে moment.utc()

সম্ভবত আপনি কেবল আউটপুট বিন্যাসের স্ট্রিং পরিবর্তন করার চেষ্টা করছেন? যদি তা হয় তবে কেবল formatপদ্ধতিটিতে আপনি যে প্যারামিটারগুলি চান তা নির্দিষ্ট করুন :

momentObj.format("YYYY-MM-DD HH:mm:ss")

আপনার কোডের শেষ থেকে লাইনগুলি সম্পর্কে - আপনি যখন আবার যান Date বস্তুর ব্যবহার করেtoDate() , আপনি moment.js এর আচরণটি ছেড়ে দিবেন এবং জাভাস্ক্রিপ্টের আচরণে ফিরে যাবেন। একটি জাভাস্ক্রিপ্ট Dateঅবজেক্ট কম্পিউটার চলমান কম্পিউটারের স্থানীয় সময় জোনে সর্বদা মুদ্রিত হবে। এই মুহূর্তে কিছুই করতে পারে না j

অন্যান্য ছোট ছোট কিছু জিনিস:

  • মুহূর্ত কন্সট্রাকটর যদিও পারেন একটি নিতে Date, এটি সাধারণত সেরা একটি ব্যবহার না করা হয়। "এখন" এর জন্য, ব্যবহার করবেন না moment(new Date())। পরিবর্তে, শুধু ব্যবহার করুন moment()। উভয়ই কাজ করবে তবে এটি অযথা অপ্রয়োজনীয়। আপনি যদি কোনও স্ট্রিং থেকে পার্সিং করছেন তবে সেই স্ট্রিংটি সরাসরি মুহুর্তে করুন। এটিকে পার্স করার চেষ্টা করবেন নাDate প্রথমে । আপনি আরও নির্ভরযোগ্য হতে মুহুর্তের পার্সারটি খুঁজে পাবেন।

  • MST7MDTপিছনের সামঞ্জস্যের কারণে যেমন সময় অঞ্চলগুলি এখানে রয়েছে। এগুলি পসিএক্স স্টাইলের সময় অঞ্চলগুলি থেকে শুরু করে এবং এর মধ্যে কয়েকটি মাত্র টিজেডিবি ডেটাতে রয়েছে। একেবারে প্রয়োজনীয় না হলে, আপনার যেমন একটি কী ব্যবহার করা উচিত America/Denver


ধন্যবাদ ম্যাট! আপনার উত্তর দরকারী ছিল। যেমন আপনি এমএসটি M এমডিটি-র পরিবর্তে আমেরিকা / ডেনভার ব্যবহারের কথা উল্লেখ করেছেন, এই ম্যাপিংগুলির জন্য কি কোনও মানচিত্র উপলব্ধ আছে? আমি সিইটি, ইইটি, ইএসটি 5 ইডিটি, সিএসটি 6 সিডিটি, পিএসটি 8 পিডিটি এর মতো বেশ কয়েকটি সময় অঞ্চল ব্যবহার করছি।
monish001

উদাহরণস্বরূপ: "10:20 এএম" (মুহুর্তের স্ট্রিংয়ের সময় () থেকে ফর্ম্যাট ('এইচ: মিমি এ')) তারিখ অবজেক্টে রূপান্তর করা সম্ভব কি ??
রাম

2
@ram - 1) আপনার যদি একটি মুহূর্ত থাকে তবে কেবল ব্যবহার করুন .toDate()। 2) নতুন প্রশ্ন জিজ্ঞাসা করতে মন্তব্য ব্যবহার করবেন না। এটিই বড় "প্রশ্ন জিজ্ঞাসা করুন" বোতামটির জন্য।
ম্যাট জনসন-পিন্ট

22

.toDate সত্যিই আমার পক্ষে কাজ করেনি, সুতরাং, আমি যা করেছি তা এখানে:

futureStartAtDate = new Date(moment().locale("en").add(1, 'd').format("MMM DD, YYYY HH:MM"))

আশাকরি এটা সাহায্য করবে


2
এই উত্তর প্রশ্নের উত্তর দেয় না। কোড লেখার একটি দীর্ঘ বিরক্তিকর উপায় moment().add(1, 'd').toDate()
রবজি

12

যেহেতু জাভাস্ক্রিপ্টের তারিখ অবজেক্টের উপরে মুহুর্তগুলির কোনও নিয়ন্ত্রণ নেই আমি এটিকে প্রায় একটি কাজ খুঁজে পেয়েছি।

const currentTime = new Date();    
const convertTime = moment(currentTime).tz(timezone).format("YYYY-MM-DD HH:mm:ss");
const convertTimeObject = new Date(convertTime);

এটি আপনাকে রূপান্তরিত সময়ের সাথে জাভাস্ক্রিপ্টের তারিখ অবজেক্ট দেবে


2
এটিই একমাত্র সঠিক উত্তর যা সরাসরি প্রশ্নের উত্তর দেয়।
আনিস সানা

1
আমি ঠিক তাই চেয়েছিলাম আমি দেশীয় তারিখগুলি সময় অঞ্চলগুলিকে সঠিকভাবে উপস্থাপন করার প্রত্যাশা করছিলাম তবে দুঃখজনকভাবে আমার ভুল ছিল।
mklbtz

1
"YYYY-MM-DD HH: mm: ss" ফর্ম্যাটটি সাফারি দ্বারা সমর্থিত নয়, ফলে ফলাফলটি শূন্য । ফর্ম্যাটটি "YYYY-MM-DDTHH: মিমি: এসএস" হওয়া উচিত (একটি ECMAScript সমর্থিত ফর্ম্যাট, তারিখ এবং সময় অংশগুলির মধ্যে একটি "টি" ব্যবহার করুন)।
রবজি

4

আমার তারিখের স্ট্রিংয়ে আমার কাছে সময় অঞ্চল তথ্য থাকা দরকার। আমি মূলত ব্যবহার moment.tz(dateStr, 'America/New_York').toString();করছিলাম তবে তারপরে আমি সেই স্ট্রিংটিকে মুহুর্তে খাওয়ানোর বিষয়ে ত্রুটি পেতে শুরু করি।

আমি চেষ্টা করেছিলাম moment.tz(dateStr, 'America/New_York').toDate();কিন্তু তারপরে আমি টাইমজোন সম্পর্কিত তথ্যগুলি হারিয়েছিলাম যা আমার প্রয়োজন ছিল।

একমাত্র সমাধান যা টাইমজোনকে সাথে সাথে ব্যবহারের যোগ্য তারিখের স্ট্রিং ফিরিয়েছিল যা মুহুর্তে ফিরে দেওয়া যেতে পারেmoment.tz(dateStr, 'America/New_York').format();


4
let dateVar = moment('any date value');
let newDateVar = dateVar.utc().format();

সুন্দর এবং পরিষ্কার !!!!


আমার ক্ষেত্রে এটিই এখানে একমাত্র সমাধান যা একটি ইউটিসি ফর্ম্যাট তৈরির জন্য কাজ করেছিল। ধন্যবাদ
লুইস ফেব্রো

3

যে কোনও তারিখ রূপান্তর করতে উদাহরণস্বরূপ utc:

moment( moment().utc().format( "YYYY-MM-DD HH:mm:ss" )).toDate()

2
এই সত্যিই আমার দিন বাঁচা!
এইচভি শর্মা

এই উত্তরটি ভুল। এটি অফসেটের টাইমজোনটি দুইবার প্রয়োগ করে: moment().utc()ইউটিসির জন্য মানগুলি .format( "YYYY-MM-DD HH:mm:ss" )ফেরত দেয় , তারপরে একটি স্ট্রিং দেয় যা টাইমজোন অফসেট ছাড়াই ইউটিসিতে সেট করা থাকে তাই স্থানীয় হিসাবে বিভক্ত হয়। এটি কোনও ডিফল্ট মুহুর্তের ফর্ম্যাটের সাথে মেলে না তাই বিল্ট ইন পার্সার দিয়ে পার্স করা হয়েছে। এটি কোনও ECMAScript সমর্থিত বিন্যাসের সাথে মেলে না, সুতরাং পার্সিংটি বাস্তবায়ন নির্ভর। যাইহোক, এটি স্থানীয় হিসাবে পার্স করা হয়েছে তাই তারিখের সময় মান তৈরি করার সময় টাইমজোন অফসেটটি আবার প্রয়োগ করা হয়।
রবজি

3

প্রশ্নটি কিছুটা অস্পষ্ট। আমি এটি ব্যাখ্যা করার জন্য যথাসাধ্য চেষ্টা করব প্রথমে আপনার বুঝতে হবে কীভাবে মুহুর্ত-সময় অঞ্চল ব্যবহার করবেন । এই উত্তরটি অনুসারে এখানে টাইপআরার: মূহুর্ত ()। টিজেড কোনও ফাংশন নয় , আপনাকে ডিফল্ট মুহুর্তের পরিবর্তে মুহূর্তের সময় অঞ্চল থেকে মুহূর্তটি আমদানি করতে হবে (অবশ্যই আপনাকে প্রথমে মুহুর্ত-টাইমজোন এনটিএম করতে হবে!)। স্বচ্ছতার স্বার্থে,

const moment=require('moment-timezone')//import from moment-timezone

এখন টাইমজোন বৈশিষ্ট্যটি ব্যবহার করার জন্য, moment.tz ("তারিখ_আরক্ষক / মুহূর্ত ()", "সময়_ অঞ্চল") ব্যবহার করুন ( আরও তথ্যের জন্য https://momentjs.com/imezone/ দেখুন)। এই ফাংশনটি একটি নির্দিষ্ট সময় অঞ্চল সহ একটি মুহুর্তের অবজেক্ট ফিরিয়ে দেবে। স্বচ্ছতার স্বার্থে,

var newYork= moment.tz("2014-06-01 12:00", "America/New_York");/*this code will consider NewYork as the timezone.*/

এখন আপনি যখন নিউইয়র্ককে (মুহুর্তের অবজেক্টটিকে) মুহুর্তের টু ডেট () (আইএসও 8601 ফর্ম্যাট রূপান্তর) দিয়ে রূপান্তর করার চেষ্টা করবেন আপনি যুক্তরাজ্যের গ্রিনিচ এর সময় পাবেন get আরও তথ্যের জন্য, ইউটিসি সম্পর্কে https://www.nhc.noaa.gov/aboututc.shtml এই নিবন্ধটি দেখুন । তবে যদি আপনি শুধুমাত্র এই ফরম্যাটে আপনার স্থানীয় সময় চান (নিউ ইয়র্ক সময়, এই উদাহরণে অনুযায়ী), শুধু পদ্ধতি যুক্ত করুন .utc (সত্য) , সঙ্গে ARG সত্য আপনার মুহূর্তে বস্তু। স্বচ্ছতার স্বার্থে,

newYork.toDate()//will give you the Greenwich ,UK, time.

newYork.utc(true).toDate()//will give you the local time. according to the moment.tz method arg we specified above, it is 12:00.you can ofcourse change this by using moment()

সংক্ষেপে, moment.tz আপনার নির্দিষ্ট সময় অঞ্চলটি বিবেচনা করে এবং আপনার স্থানীয় সময়কে গ্রিনউইচের সময়ের সাথে তুলনা করে আপনাকে একটি ফলাফল দেয়। আমি আশা করি এটি কার্যকর ছিল।


2

মুহূর্তটি 06/2018-তে জেএস লিব আপডেট করেছে।

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00

আপনার যদি Angular5 + ব্যবহার করার স্বাধীনতা থাকে তবে এখানে টাইমজোন ফাংশনের চেয়ে ডেট পাইপ বৈশিষ্ট্যটি আরও ভাল ব্যবহার করুন। আমাকে moment.js ব্যবহার করতে হবে কারণ আমার প্রকল্পটি কেবলমাত্র Angular2 এ সীমাবদ্ধ।


1

চেষ্টা করুন ( formatপদক্ষেপ ছাড়াই )

new Date(moment())


new Date(moment())সমতূল্য new Date()। সময় অঞ্চলটি কেবলমাত্র ডি এর জন্য নির্ধারিত ।
রবজি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.