জাভাস্ক্রিপ্টের তারিখ অবজেক্টটি কি সর্বদা একদিন বন্ধ থাকে?


238

আমার জাভা স্ক্রিপ্ট অ্যাপ্লিকেশনটিতে আমার কাছে এমন বিন্যাসে তারিখটি সংরক্ষণ করা হয়েছে:

2011-09-24

এখন যখন আমি একটি নতুন তারিখ অবজেক্ট তৈরি করার জন্য উপরের মানটি ব্যবহার করার চেষ্টা করি (যাতে আমি তারিখটি অন্য কোনও ফর্ম্যাটে পুনরুদ্ধার করতে পারি), তারিখটি সর্বদা একদিনের ছুটিতে ফিরে আসে। নিচে দেখ:

var doo = new Date("2011-09-24");
console.log(doo);

লগ:

Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)

11
জাভাস্ক্রিপ্টের তারিখ শ্রেণি একটি তারিখ উপস্থাপন করে না, এটি একটি টাইমস্ট্যাম্প উপস্থাপন করে (জাভাতে একই)। এটির তারিখ তৈরি করতে, এটি একটি সময় অঞ্চল ব্যবহার করে এবং এটিই আপনার সমস্যার কারণ। এটি GMT / UTC টাইমজোন (সেপ্টেম্বর 24 2011, 00 : 00 ইউটিসি) দিয়ে পার্স করে এবং তারপরে এটিকে 4 ঘন্টা আলাদা টাইমজোন দিয়ে আউটপুট করে (সেপ্টেম্বর 23 2011, 20 : 00 GMT-0400)।
কোডো

2
আমি "অবৈধ তারিখ" পেয়েছি। '/' অক্ষরগুলির সাথে '-' অক্ষরগুলি প্রতিস্থাপন করুন এবং আবার চেষ্টা করুন। অথবা তারিখটিকে তার বিটগুলিতে বিভক্ত করুন এবং উপাদানগুলি পৃথকভাবে সেট করুন (যদি আপনি এটি করেন, মাসের সংখ্যা থেকে 1 বিয়োগ করুন)।
রবজি

@ কোডো - হ্যাঁ, ভাল উত্তর ইসিএমএ-262 15.9.1.15 প্রযোজ্য। ওপিতে "2011-09-24T20: 00: 00-04: 00" বা অনুরূপ ব্যবহার করা উচিত।
রবজি

1
আমি দেখেছি যে "সেপ্টেম্বর 24 2011" ফর্ম্যাটটি সঠিক তারিখটি ফিরিয়ে দেবে। এখানে একটি ব্যাখ্যা জন্য দেখুন: stackoverflow.com/questions/2587345/javascript-date-parse
christurnerio

উত্তর:


98

লক্ষ্য করুন যে পূর্ব দিবালোক সময় -4 hoursএবং আপনি ফিরে আসার তারিখের সময়গুলি 20

20h + 4h = 24h

যা 2011-09-24 এর মধ্যরাত। তারিখটি ইউটিসিতে (GMT) পার্স করা হয়েছে কারণ আপনি কোনও সময় অঞ্চল সূচক ছাড়াই কেবলমাত্র তারিখের স্ট্রিং সরবরাহ করেছেন। আপনি যদি পরিবর্তে ( new Date("2011-09-24T00:00:00")) তারিখ / সময়ের স্ট্রিং w / o একটি সূচক দিয়ে থাকেন তবে এটি আপনার স্থানীয় সময় অঞ্চলটিতে পার্স করা হত। (Histতিহাসিকভাবে সেখানে অসঙ্গতি রয়েছে, কমপক্ষে নয় কারণ স্পেকটি একাধিকবার পরিবর্তিত হয়েছিল, তবে আধুনিক ব্রাউজারগুলি ঠিক হওয়া উচিত; অথবা আপনি সর্বদা সময়সীকরণ সূচককে অন্তর্ভুক্ত করতে পারেন))

আপনি সঠিক তারিখ পাচ্ছেন, আপনি কখনই সঠিক সময় অঞ্চলটি নির্দিষ্ট করেন নি।

আপনার যদি তারিখের মানগুলি অ্যাক্সেস করতে হয় তবে আপনি getUTCDate()বা অন্য যে কোনও getUTC*()ফাংশন ব্যবহার করতে পারেন :

var d,
    days;
d = new Date('2011-09-24');
days = ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'];
console.log(days[d.getUTCDay()]);

24
আপনি কীভাবে "সঠিক সময় অঞ্চল নির্দিষ্ট করে"? তারিখ নির্মাতা সর্বদা তারিখের স্ট্রিংটিকে ইউটিসি হিসাবে ব্যাখ্যা করে, তবে তারপরে টাইমজোনের জন্য সামঞ্জস্য করে। এমনকি আমি Date নতুন তারিখ ('2012-01-02 ইডিটি' )ও করতে পারি এবং দিবালোকের সঞ্চয়ের জন্য অফসেট প্রয়োগ করার কারণে এটি আগের দিনটিতে আবার সরিয়ে নিয়ে যায়, যা কোনও অর্থহীন নয় কারণ যদি আমি আপনাকে বলেছিলাম যে অনুযায়ী তারিখটি EDT- র বর্তমান স্থানীয় সময় অঞ্চল, এটিতে অতিরিক্ত অফসেট প্রয়োগ করবেন না। আমি এটিকে বলেছিলাম টাইমজোনটি ইডিটি ছিল তবে এটি এখনও অতিরিক্ত অফসেট প্রয়োগ করে এটি একদিন পিছনে সরিয়ে নিয়েছে।
অ্যারোনএলএস

1
@AaronLS, EDTহয় দিবালোক সংরক্ষণ সময় (এছাড়াও গ্রীষ্মকালীন সময় নামেও পরিচিত) , ESTজানুয়ারিতে প্রযোজ্য সময় অঞ্চল হয়।
zzzzBov

1
স্ট্রিং থেকে একে একে ইউটিসি হিসাবে তৈরি করা আমি যা করতে চাই তা তাই আমি কেন "আপনি কীভাবে" সঠিক সময় অঞ্চল নির্ধারণ করবেন "জিজ্ঞাসা করেছি?" যেখানে আপনি বলেছেন "আপনি কখনই সঠিক সময় অঞ্চলটি নির্দিষ্ট করেননি" যদি আমি new Date('2012-01-01 GMT')এটি করি তবে এটি কোনও অফসেট প্রয়োগ করে কারণ এটি এটিকে ব্যবহারকারীর স্থানীয় তারিখের সময় রূপান্তর করে।
অ্যারোনলএস

7
@ অ্যারোনলএস, আপনি যদি get*পদ্ধতিগুলি ব্যবহার করতে বাধ্য হন এবং অজানা টাইমজোন অফসেট সহ সঠিক তারিখ / সময় ফিরিয়ে আনার প্রয়োজন হয় তবে কেবল অজানা টাইমজোন অফসেটে যুক্ত করুন: d = new Date('2013-01-08 GMT'); d.setMinutes(d.getMinutes() + d.getTimezoneOffset());এটি ব্যবহারকারীর লোকেলের সাথে তারিখটি স্বাভাবিক করবে যাতে .get*পদ্ধতিগুলি ফিরে আসবে প্রত্যাশিত মান। .getUTC*পদ্ধতি তারপর ভুল হতে, তাই সাবধান হবে।
zzzzBov

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

252

জেএস তারিখ অবজেক্টের সাথে ঘটে এমন বেশ কয়েকটি ক্রেজি জিনিস রয়েছে যা স্ট্রিংগুলিকে রূপান্তর করে, উদাহরণস্বরূপ আপনি প্রদত্ত নীচের তারিখটি বিবেচনা করুন

দ্রষ্টব্য: আপনার সময় অঞ্চল এবং বর্তমান সময়ের উপর নির্ভর করে নিম্নলিখিত উদাহরণগুলি এক দিনের অফ হতে পারে বা নাও হতে পারে ।

new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.

তবে, আমরা যদি স্ট্রিং ফর্ম্যাটটিকে মাস-ডে-ইয়ারে পুনরায় সাজাই ...

new Date("09-24-2011");
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

আরেকটি আজব

new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.

new Date("2011/09/24"); // change from "-" to "/".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

নতুন তারিখ তৈরি করার সময় আমরা আপনার "2011-09-24" তারিখে সহজেই হাইফেনগুলি পরিবর্তন করতে পারি

new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

আমাদের যদি "2011-09-24T00: 00: 00" এর মতো তারিখের স্ট্রিং থাকে তবে কী হবে?

new Date("2011-09-24T00:00:00");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.

এখন পরিবর্তন হাইফেন থেকে ফরোয়ার্ড স্ল্যাশ আগের মত; কি ঘটেছে?

new Date("2011/09/24T00:00:00");
// => Invalid Date

আমি সাধারণত তারিখের ফর্ম্যাটটি 2011-09-24T00: 00: 00 পরিচালনা করতে হয় তাই আমি এটি করি।

new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

হালনাগাদ

আপনি যদি তারিখ নির্মাণকারীকে পৃথক যুক্তি সরবরাহ করেন তবে নীচে বর্ণিত হিসাবে অন্যান্য দরকারী ফলাফলগুলি পেতে পারেন

দ্রষ্টব্য: আর্গুমেন্টগুলি সংখ্যা বা স্ট্রিংয়ের হতে পারে। আমি মিশ্র মান সহ উদাহরণগুলি দেখাব।

প্রদত্ত বছরের প্রথম মাস এবং দিন পান

new Date(2011, 0); // Normal behavior as months in this case are zero based.
=> // Sat Jan 01 2011 00:00:00 GMT-0700 (MST)

এক বছরের শেষ মাস এবং দিন পান

new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
=> // Sat Dec 31 2011 00:00:00 GMT-0700 (MST)

সংখ্যা উদাহরণ, স্ট্রিং আর্গুমেন্ট। নোট করুন মার্চ, কারণ আবার শূন্য ভিত্তিক মাস।

new Date(2011, "02"); 
=> // Tue Mar 01 2011 00:00:00 GMT-0700 (MST)

আমরা যদি একই জিনিসটি করি তবে শূন্যের দিন সহ আমরা কিছু আলাদা পাই।

new Date(2011, "02", 0); // again the zero roles back from March to the last day of February.
=> // Mon Feb 28 2011 00:00:00 GMT-0700 (MST)

যে কোনও বছর এবং মাসের যুক্তিতে শূন্যের একটি দিন যুক্ত করা পূর্ববর্তী মাসের শেষ দিনটি পাবে। যদি আপনি নেতিবাচক সংখ্যাগুলি দিয়ে চালিয়ে যান তবে আপনি অন্য কোনও দিন পিছনে ঘুরতে পারেন

new Date(2011, "02", -1);
=> // Sun Feb 27 2011 00:00:00 GMT-0700 (MST)

12
এটি আসলে আমাকে সেরা সাহায্য করেছে। আমি যখন নতুন তারিখ তৈরি করেছি তখন আমি কেবলমাত্র "rere (/ - / g, '\ /') যোগ করেছি (প্রতিস্থাপন (/ টি। + /, '') Data সুপার ইজি!
ডেভিন প্রিজিয়ান

64
বাহ - জাভাস্ক্রিপ্ট মারাত্মকভাবে বেমানান।
psparrow

2
.Replace () কলগুলি আজ সন্ধ্যায় একটি চিম্টিতে সত্যই সহায়তা করেছে।
ব্যবহার করুন

2
হ্যাঁ আমি এই সমস্ত পরীক্ষা করে দেখেছি এবং এটি সত্যিই আশ্চর্যের।
চিন্তন আদাতীয়া

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

71

তারিখটি স্বাভাবিক করতে এবং অযাচিত অফসেটটি নির্মূল করতে (এখানে পরীক্ষিত: https://jsfiddle.net/7xp1xL5m/ ):

var doo = new Date("2011-09-24");
console.log(  new Date( doo.getTime() + Math.abs(doo.getTimezoneOffset()*60000) )  );
// Output: Sat Sep 24 2011 00:00:00 GMT-0400 (Eastern Daylight Time)

এটি একই কাজটি করে এবং @tarparti creditণ (এখানে পরীক্ষিত: https://jsfiddle.net/7xp1xL5m/1/ ):

var doo = new Date("2011-09-24");
console.log( new Date( doo.getTime() - doo.getTimezoneOffset() * -60000 )  );

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

এটি আমার জন্য কাজ করেছে ব্যতীত আমাকে জোনঅফসেটের সময় বিয়োগ করতে হবে, এটি যুক্ত করা উচিত নয়
এরিকগ্রিফিন

@ এরিকাগ্রিফিন আপনি কি জিএমটি -0 এক্স 100 এর পরিবর্তে জিএমটি + 0 এক্স 100 এর জন্য ইতিবাচক টাইম জোনে আছেন?
অ্যারোনএলএস

আমি অনুরূপ কিছু করেছি:doo.setMinutes(doo.getMinutes() + doo.getTimezoneOffset())
ডিসিস্টেন্ট রাগ

2
@ অ্যারোনলএস আপনি সঠিক পথে ছিলেন তবে কিছুটা ভুল যুক্তি। টিজেড অফসেটের জন্য ক্ষতিপূরণ দেওয়ার জন্য সঠিক যুক্তিটি হ'ল: কনসোল.লগ (নতুন তারিখ (doo.getTime () - doo.getTimezoneOffset () * -60000)); - অফসেটের চিহ্নটি গুরুত্বপূর্ণ এবং এলোমেলো করা যাবে না তবে সংশোধনের জন্য আপনার বিপরীত চিহ্নও প্রয়োজন তাই বিপরীত চিহ্নটি প্রয়োগ করার জন্য আমরা অফসেটটি -60000 দিয়ে গুণ করব।
tpartee

28

আপনি যদি স্থানীয় সময় অঞ্চলে কোনও তারিখের ঘন্টা 0 পেতে চান তবে পৃথক তারিখের অংশগুলি Dateকনস্ট্রাক্টরের কাছে দিন।

new Date(2011,08,24); // month value is 0 based, others are 1 based.

26

কেবল যুক্ত করতে চান যে স্ট্রিংয়ের শেষে দৃশ্যত একটি স্পেস যুক্ত করা সৃজনের জন্য ইউটিসি ব্যবহার করবে।

new Date("2016-07-06")
> Tue Jul 05 2016 17:00:00 GMT-0700 (Pacific Daylight Time)

new Date("2016-07-06 ")
> Wed Jul 06 2016 00:00:00 GMT-0700 (Pacific Daylight Time)

সম্পাদনা: এটি কোনও প্রস্তাবিত সমাধান নয়, কেবল একটি বিকল্প উত্তর। কী হচ্ছে তা খুব স্পষ্ট না হওয়ায় দয়া করে এই পদ্ধতির ব্যবহার করবেন না। এই দুর্ঘটনাক্রমে বাগটি সৃষ্টির কারণে কেউ এই পদ্ধতিতে চুল্লি চালানোর বিভিন্ন উপায় রয়েছে।


শেষে স্থান সহ উদাহরণের জন্য, কনসোল "অবৈধ তারিখ = $ 2"
ব্রায়ান ঝুঁকি

1
খুব ভাল কাজ করে! নতুন তারিখ (data.Date + + "") .toLocaleDateString ( "স্বীকারোক্তি-মার্কিন")
Nakres

ন্যায়বিচারের জন্য, এটি কেবল একটি বিকল্প উত্তর ছিল, এবং এটি একটি প্রস্তাবিত সমাধান নয়।
কাইল শ্রাডার

25

আমি বিশ্বাস করি এটির সাথে সময়-অঞ্চল সমন্বয় করতে হবে। আপনি যে তারিখটি তৈরি করেছেন তা GMT এ এবং ডিফল্ট সময়টি মধ্যরাত্রি, তবে আপনার সময় অঞ্চলটি EDT, তাই এটি 4 ঘন্টা বিয়োগ করে। যাচাই করার জন্য এটি চেষ্টা করুন:

var doo = new Date("2011-09-25 EDT");

3
এটি এখানে সেরা উত্তর। প্রোগ্রামিয়ালি রূপান্তর করার পরিবর্তে বিল্ট-ইন টাইমজোন স্থানীয়করণের স্ট্রিং ব্যবহার করার জন্য + 1 মিলিয়ন।
ব্লার্ন করুন

2
এই এক সাহায্য করে। এটি এর মতো কাজ করে: $ স্কোপ.ড্যাট = নতুন তারিখ (ডেটস্ট্রিং + 'ইডিটি')। যদিও ইডিটি এবং ইএসটি মধ্যে পার্থক্যটি নোট করুন: লিঙ্ক
ওয়েইহুই গুও

আমি জানি না পর্দার আড়ালে কী ঘটছে, তবে এটি পুরোপুরি কার্যকর হয়।
the_haystacker

এটি আমি বলব উত্তরের সর্বাধিক সরলবাদী এবং কম কোড পুনর্মিলন।
মাইকেল

ধন্যবাদ, আমি আমার কাছে সেরা উপায় বিবেচনা করি।
জ্যান্ডারসন কনস্টান্টিনো

11

আপনার সমস্যাটি বিশেষত সময় অঞ্চল নিয়ে। নোট অংশ GMT-0400- যে আপনি GMT পিছনে 4 ঘন্টা। যদি আপনি প্রদর্শিত তারিখ / সময়টিতে 4 ঘন্টা যোগ করেন তবে আপনি ঠিক 2011/09/24 মধ্যরাত পাবেন। toUTCString()GMT স্ট্রিং পেতে পরিবর্তে পদ্ধতিটি ব্যবহার করুন :

var doo = new Date("2011-09-24");
console.log(doo.toUTCString());

6

এটি সম্ভবত একটি ভাল উত্তর নয়, তবে আমি এই সমস্যাটির সাথে আমার অভিজ্ঞতাটি ভাগ করে নিতে চাই।

আমার অ্যাপ্লিকেশনটি বিশ্বব্যাপী 'YYYY-MM-DD' ফর্ম্যাটের সাথে utc তারিখ ব্যবহার করছে, আমি যে তারিখ-পিকার প্লাগইনটি ব্যবহার করি কেবল js তারিখ গ্রহণ করি, ইউটিসি এবং জেএস উভয় বিবেচনা করা আমার পক্ষে কঠিন hard সুতরাং আমি যখন আমার ডেটপিকারের কাছে 'YYYY-MM-DD' ফর্ম্যাট করা তারিখটি পাস করতে চাই, আমি প্রথমে moment.js বা আপনার পছন্দসই কিছু ব্যবহার করে এটিকে 'এমএম / ডিডি / ওয়াইওয়াইওয়াই' ফর্ম্যাটে রূপান্তর করি এবং তারিখপিকারে তারিখ প্রদর্শন এখন সঠিক। আপনার উদাহরণের জন্য

var d = new Date('2011-09-24'); // d will be 'Fri Sep 23 2011 20:00:00 GMT-0400 (EDT)' for my lacale
var d1 = new Date('09/24/2011'); // d1 will be 'Sat Sep 24 2011 00:00:00 GMT-0400 (EDT)' for my lacale

স্পষ্টতই ডি 1 হ'ল আমি চাই। আশা করি এটি কিছু লোকের জন্য সহায়ক হবে।


আপনার মতো ফর্ম্যাটগুলি স্যুইচ করা, আমার জন্য একই কাজ করেছে। খুব অদ্ভুত.
জেএসি

5

লুপের জন্য এটি আমার মাধ্যমে, zzzBov এর উত্তরে +1। এখানে ইউটিসি পদ্ধতি ব্যবহার করে আমার জন্য কাজ করার তারিখের সম্পূর্ণ রূপান্তর রয়েছে:

//myMeeting.MeetingDate = '2015-01-30T00:00:00'

var myDate = new Date(myMeeting.MeetingDate);
//convert to JavaScript date format
//returns date of 'Thu Jan 29 2015 19:00:00 GMT-0500 (Eastern Standard Time)' <-- One Day Off!

myDate = new Date(myDate.getUTCFullYear(), myDate.getUTCMonth(), myDate.getUTCDate());
//returns date of 'Fri Jan 30 2015 00:00:00 GMT-0500 (Eastern Standard Time)' <-- Correct Date!

4

এর অর্থ 2011-09-24 00:00:00 GMT, এবং যেহেতু আপনি এখানে এসেছেন GMT -4, এটি 20:00আগের দিনটি হবে।

ব্যক্তিগতভাবে, আমি পাই 2011-09-24 02:00:00, কারণ আমি থাকি GMT +2


3

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

var dateString = "2011-09-24";
var dateParts = dateString.split("-");
var date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);

নোট করুন যে আপনাকে জেএস অদ্ভুততার অন্য এক টুকরো জন্য অ্যাকাউন্ট করতে হবে: মাসটি শূন্য-ভিত্তিক।


2

আমার ক্লায়েন্ট আটলান্টিক স্ট্যান্ডার্ড টাইমে ছিল যেখানে আমি এই সঠিক সমস্যার মুখোমুখি হয়েছি। ক্লায়েন্টটি পুনরুদ্ধার করা তারিখের মানটি ছিল "2018-11-23" এবং কোডটি new Date("2018-11-23")ক্লায়েন্টের আউটপুটে এটি পাস করার পরের দিনটি ছিল। আমি স্নিপেটে দেখানো মতো একটি ইউটিলিটি ফাংশন তৈরি করেছি যা ক্লায়েন্টকে প্রত্যাশিত তারিখ দেয় the

date.setMinutes(date.getMinutes() + date.getTimezoneOffset());

var normalizeDate = function(date) {
  date.setMinutes(date.getMinutes() + date.getTimezoneOffset());
  return date;
};

var date = new Date("2018-11-23");

document.getElementById("default").textContent = date;
document.getElementById("normalized").textContent = normalizeDate(date);
<h2>Calling new Date("2018-11-23")</h2>
<div>
  <label><b>Default</b> : </label>
  <span id="default"></span>
</div>
<hr>
<div>
  <label><b>Normalized</b> : </label>
  <span id="normalized"></span>
</div>


2

আপনি যদি কেবল খেজুরের পৃথক অংশগুলি প্রদর্শনের উদ্দেশ্যে একই থাকে তা নিশ্চিত করতে চাইছেন, * আমি আমার টাইমজোনটি পরিবর্তন করেও এটি কাজ করে বলে মনে হচ্ছে:

var doo = new Date("2011-09-24 00:00:00")

শুধু সেখানে শূন্য যোগ করুন।

আমার কোডে আমি এটি করি:

let dateForDisplayToUser = 
  new Date( `${YYYYMMDDdateStringSeparatedByHyphensFromAPI} 00:00:00` )
  .toLocaleDateString( 
    'en-GB', 
    { day: 'numeric', month: 'short', year: 'numeric' }
  )

এবং আমি আমার কম্পিউটারে আমার টাইমজোনটি ঘুরে দেখি এবং তারিখটি API থেকে প্রাপ্ত yyyy-mm-dd তারিখের মতোই থাকে।

তবে আমি কি কিছু মিস করছি / এটি কি খারাপ ধারণা?

কমপক্ষে ক্রোমে in এটি সাফারি তে কাজ করে না! এই লেখা হিসাবে


আপনি যখন করেন .toISOString(), এটি 1 দিন পিছনে যায়।
vivek_23

new Date('2019/11/18 05:30:00').toISOString();আমার জন্য কাজ করেছেন
vivek_23

1

আরও রূপান্তর পদ্ধতি ব্যবহার না করে এটি পরিচালনা করার সেরা উপায়,

 var mydate='2016,3,3';
 var utcDate = Date.parse(mydate);
 console.log(" You're getting back are 20.  20h + 4h = 24h :: "+utcDate);

এখন কেবল আপনার তারিখে GMT যুক্ত করুন বা আপনি এটি যুক্ত করতে পারেন।

 var  mydateNew='2016,3,3'+ 'GMT';
 var utcDateNew = Date.parse(mydateNew);
 console.log("the right time that you want:"+utcDateNew)

লাইভ: https://jsfiddle.net/gajender/2kop9vrk/1/


1

আমি এর মতো কিছু সমস্যার মুখোমুখি হয়েছি। ডাটাবেস থেকে তারিখ পাওয়ার সময় আমার সমস্যাটি সেট অফ ছিল।

এটি ডাটাবেসে স্ট্রোড এবং এটি ইউটিসি ফর্ম্যাটে রয়েছে।

2019-03-29 19: 00: 00.0000000 +00: 00

সুতরাং আমি যখন ডাটাবেস এবং চেক তারিখ থেকে এটি পেতে এটি অফসেট যোগ করা হয় এবং জাভাস্ক্রিপ্ট ফিরে পাঠাতে।

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

এটি +05: 00 যোগ করছে কারণ এটি আমার সার্ভারের টাইমজোন। আমার ক্লায়েন্ট বিভিন্ন টাইম জোনে +07: 00 এ আছেন।

2019-03-28T19: 00: 00 + 05: 00 // এটি আমি জাভাস্ক্রিপ্টে পেয়েছি।

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

var dates = price.deliveryDate.split(/-|T|:/);
var expDate = new Date(dates[0], dates[1] - 1, dates[2], dates[3], dates[4]);
var expirationDate = new Date(expDate);

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



0

আপনি আইএসও তারিখের স্ট্রিং ফর্ম্যাট ব্যবহার করছেন যা এই পৃষ্ঠা অনুসারে ইউটিসি টাইমজোন ব্যবহার করে তারিখটি নির্মাণের কারণ ঘটায়:

দ্রষ্টব্য: তারিখের নির্মাণকারীর (এবং তারিখ পার্স, তারা সমতুল্য) সাথে তারিখের স্ট্রিংগুলি পার্সিং করা ব্রাউজারের পার্থক্য এবং অসঙ্গতিগুলির কারণে দৃ strongly়ভাবে নিরুৎসাহিত। আরএফসি 2822 ফর্ম্যাট স্ট্রিংগুলির জন্য সমর্থন কেবল কনভেনশন দ্বারা। আইএসও 8601 ফর্ম্যাটগুলির জন্য সমর্থন কেবলমাত্র তারিখের স্ট্রিংগুলিতে পৃথক হয় (যেমন "1970-01-01") স্থানীয় হিসাবে নয় ইউটিসি হিসাবে বিবেচিত হয়।

আপনি যদি পাঠ্যটিকে অন্যভাবে ফর্ম্যাট করেন "Jan 01 1970"তবে যেমন (অন্তত আমার মেশিনে) এটি আপনার স্থানীয় সময় অঞ্চল ব্যবহার করে।


0

এই থ্রেডটিতে আমার 2 সেন্ট যোগ করার চেষ্টা করছে (@ পল-উইন্টজ উত্তরটি বিশদভাবে জানাচ্ছি)।

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

new Date('2020-05-07')
Wed May 06 2020 20:00:00 GMT-0400 (Eastern Daylight Time)

যদি তারিখের স্ট্রিংটি অন্য কোনও "লুজার" ফর্ম্যাটে থাকে ("/" ব্যবহার করে বা তারিখ / মাস শূন্যের সাথে প্যাড করা হয় না) এটি স্থানীয় সময় অঞ্চলে তারিখটি তৈরি করে, সুতরাং কোনও তারিখ স্থানান্তর সমস্যা নেই।

new Date('2020/05/07')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-5-07')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-5-7')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-05-7')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)

সুতরাং উপরে উল্লিখিত হিসাবে একটি দ্রুত ফিক্সটি হ'ল কেবলমাত্র আপনার আইএসও বিন্যাসিত তারিখের স্ট্রিংয়ের "-" সাথে "/" প্রতিস্থাপন করা।

new Date('2020-05-07'.replace('-','/'))
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)

0

yyyy-mm-ddমাইএসকিউএল তারিখের ফর্ম্যাটে সংরক্ষণ করা আপনাকে নিম্নলিখিতগুলি করতে হবে:

const newDate = new Date( yourDate.getTime() + Math.abs(yourDate.getTimezoneOffset()*60000) );
console.log(newDate.toJSON().slice(0, 10)); // yyyy-mm-dd

-1

আপনার লগ GMT আউটপুট তাই আপনি আপনার সময় অঞ্চল নির্দিষ্ট করতে চান:

var doo = new Date("2011-09-24 EST");

3
এই প্রশ্নের ইতিমধ্যে অনেক উত্তর রয়েছে। আপনি যদি যাইহোক প্রশ্নের উত্তর দিতে চান, আপনার নতুন কিছু উল্লেখ করা উচিত যা অন্য উত্তরগুলি দেয় না। শীর্ষের উত্তরটি ইতিমধ্যে আরও বেশি বিশদে সময় অঞ্চল নিয়ে সমস্যাটি ব্যাখ্যা করে with
ক্যালভিন গডফ্রে

এই উত্তরটি প্রায় স্ট্যাকওভারফ্লো.com
a/

কে ব্যাখ্যা করে তার ব্যাখ্যা আরও গভীরতর হলে ... তার কোডটি এখনও আমার থেকে আলাদা। খনি অনেক সহজ। এবং হ্যাঁ পাথর আরচনিড আপনি সঠিক। আমার খারাপ।
bmacx7

-3

কিছুই নয়, GMT -0400 খেয়াল করেনি, যার কারণে গতকাল তারিখটি ঘটে

আপনি একটি ডিফল্ট "সময়" সেট করতে 12:00:00 হতে চেষ্টা করতে পারেন


হ্যাঁ, আমি আমার উত্তরটি নিয়ে কিছুটা দ্রুত ছিলাম, তার জন্য দুঃখিত। আমার উত্তর সংশোধন।
ক্রিশ এইচ

-3

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

    var doo = new Date("2011-09-24").format("m/d/yyyy");

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