ইউটিসি পর্বকে স্থানীয় তারিখে রূপান্তর করুন


273

আমি এই নিয়ে কিছুক্ষণ লড়াই করছি। আমি যুগকে একটি ডেট অবজেক্টে রূপান্তরিত করার চেষ্টা করছি। ইউটিসি-তে আমার কাছে পাঠানো হয়। আপনি যখনই new Date()কোনও যুগকে পাস করবেন, তখনই এটি ধরে নেবে এটি স্থানীয় যুগের। আমি একটি ইউটিসি অবজেক্ট তৈরি করার চেষ্টা করেছি, তারপরে setTime()এটিকে যথাযথ যুগের সাথে সামঞ্জস্য করতে ব্যবহার করেছি, তবে কেবল কার্যকর পদ্ধতি বলে মনে হচ্ছে toUTCString()এবং স্ট্রিংগুলি আমাকে সহায়তা করে না। যদি আমি সেই স্ট্রিংটি একটি নতুন তারিখে পাস করি তবে এটি লক্ষ্য করা উচিত যে এটি ইউটিসি, তবে তা হয় না।

new Date( new Date().toUTCString() ).toLocaleString()

আমার পরবর্তী প্রয়াসটি ছিল স্থানীয় বর্তমান যুগ এবং ইউটিসির বর্তমান যুগের মধ্যে পার্থক্য পাওয়ার চেষ্টা করা, তবে আমি সেটিও পাইনি।

new Date( new Date().toUTCString() ).getTime() - new Date().getTime()

এটি আমাকে 1000 বছরের নীচে খুব ছোট পার্থক্য দিচ্ছে, যা মিলি সেকেন্ডে রয়েছে।

কোনও পরামর্শ?


11
ইউটিসি-তে 1970 সালের তারিখ থেকে ইউপ সময়কে বিচ্ছুরিত মিলিসেকেন্ড হিসাবে সংজ্ঞায়িত করা হয় । স্থানীয় যুগের মতো কিছু নেই! নিশ্চিত না যে আমি আপনার সমস্যাটি বুঝতে পেরেছি।
চেতন সাস্ট্রি

হতে পারে কম্পিউটারে টাইমজোনটি ভুল, একটি ভিন্ন ইউটিসি মান নিয়ে যায়?
কিজিন

2
আপনি লোকাল স্ট্রিং () ব্যবহার করার সময় ইউটিসি সময় 'দেখতে' চাইলে আপনার ঘড়িটি ইউটিসি সময়কে সেট করতে হবে। মধ্যরাত ইউটিসি সন্ধ্যা 7 টা ইএসটি। আপনি যদি লোকালস্ট্রিংয়ের পরিবর্তে নতুন তারিখ ()। টু স্ট্রিং () ব্যবহার করেন তবে আপনি এমন কিছু পেতে পারেন: 'শুক্র জানুয়ারী 07 2011 07:00:00 GMT-0500', এতে অফসেট অন্তর্ভুক্ত রয়েছে।
কেনেবেক

উত্তর:


463

আমি মনে করি আমার একটি সহজ সমাধান আছে - যুগের প্রাথমিক তারিখটি সেট করুন এবং ইউটিসি ইউনিট যুক্ত করুন। বলুন আপনার কাছে একটি ইউটিসি যুগের সংস্করণ রয়েছে সেকেন্ডে। কীভাবে 1234567890। স্থানীয় সময় অঞ্চলে এটিকে উপযুক্ত তারিখে রূপান্তর করতে:

var utcSeconds = 1234567890;
var d = new Date(0); // The 0 there is the key, which sets the date to the epoch
d.setUTCSeconds(utcSeconds);

d এখন একটি তারিখ (আমার সময় অঞ্চলে) সেট করা আছে Fri Feb 13 2009 18:31:30 GMT-0500 (EST)


189
এফডাব্লুআইডাব্লু, তারিখ অবজেক্টগুলি মিলিসেকেন্ডের সাহায্যে সূচনা করা যেতে পারে। সুতরাং, var d = new Date(utcSeconds * 1000)একই ফলাফল পাওয়া উচিত।
কুর্তেভেইকিং

54
var d = new Date(1234567890000)একই ফলাফলটি ফেরত দেয়
মাতাজাজ লিপাস

11
ভেবেছিল হয়ত অন্যরা কয়েকটি দফায় কিছু স্পষ্টতা পেতে পারে: তারিখের অবজেক্টটি "এতে স্ট্যাম্পড" টাইমজোন দিয়ে সেট হয় না। এটি একটি সংখ্যা ছাড়া কিছুই হিসাবে ভাবেন। সেই সংখ্যাটি 1970 জন 1 ইউটিসি থেকে এখন অবধি (এখন ইউটিসিতেও রয়েছে) মিলিসেকেন্ডের সংখ্যা। সুতরাং, আপনি যখনই কোনও তারিখের অবজেক্ট তৈরি করেন, তখন এটি সত্যিই পর্দার পিছনে ইউটিসিতে থাকে। ২. তারিখটি প্রদর্শন করতে, আপনি এটিকে লোকেল সেটিং (টু লোকালস্ট্রিং () বা ইউটিসি (টুটসিএসট্রিং ()) হিসাবে প্রদর্শন করতে পারেন you আপনাকে নিজের কোনও কিছুতে রূপান্তর করতে হবে না ut ইউটিসি মিলিসেক দিয়ে তৈরি করুন, সমস্ত ভাল with স্ট্রিং - এতক্ষণ যেমন স্থানীয় টাইমজোনের মধ্যে আছে।
দা Bích

2
1234567890000 1234567890 হিসাবে একই হিসাবে চিকিত্সা করা হয়, ওরফ ওয়াই 39 কে সমস্যা ...
মটনআপ

1
@ মটনআপ, এটির সাথে 1000 টি মাল্টিপ্লিকেশন রয়েছে। তবে, 'ওয়াই 39 কে সমস্যা' গুগল কোনও বৈধ ফলাফল দিচ্ছে না Any কোনও ইউআরএল সহায়ক হবে
পি সতীশ প্যাট্রো

237

এটি সহজ new Date(), যেমন মিলি সেকেন্ড লাগে, যেমন

new Date(1394104654000)
> Thu Mar 06 2014 06:17:34 GMT-0500 (EST)

6
সুন্দর! এটিকে সত্যই গৃহীত উত্তর হিসাবে বিবেচনা করা উচিত।
নিজার বি।

এইটি আমার পক্ষে কাজ করেনি, আপনার টাইমস্ট্যাম্প থাকলে এটি কাজ করে তবে ইউটিসি যুগের সাথে আপনাকে ম্যানুয়ালি বাক্সগুলি সেট করতে হবে, গ্রহণযোগ্য উত্তরটি সঠিক উত্তর
একইরালি

12
এটি একটি উপযুক্ত উত্তর। নতুন তারিখ 1000 দ্বারা অতএব শুধু সংখ্যাবৃদ্ধি মিলিসেকেন্ড সময় লাগতে পারে: const d = new Date(epoch * 1000)
ভিনিল

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

32

এবং শুধুমাত্র লগগুলির জন্য, আমি মোমেন্ট.জেএস ব্যবহার করে এটি করেছি লাইব্রেরি , যা আমি যাইহোক বিন্যাসের জন্য ব্যবহার করছিলাম।

moment.utc(1234567890000).local()
>Fri Feb 13 2009 19:01:30 GMT-0430 (VET)

1
মুহুর্তটি দুর্দান্ত, তবে একটি পর্বকে কেবল একটি তারিখে রূপান্তর করতে একটি 1.3MB লাইব্রেরি ব্যবহার করা পাগল। আশ্চর্যের কিছু নেই যে সেখানে প্রচুর ফোলা নোড অ্যাপ রয়েছে।
not2qubit

20

পর্ব সময় হয় সেকেন্ড জানুয়ারি 1, 1970 থেকে date.getTime()আয় মিলিসেকেন্ড .. জানুয়ারি 1, 1970 থেকে, তাই আপনি যদি একটি যুগান্তকারী টাইমস্ট্যাম্প আছে, 1000 দ্বারা গুন দ্বারা একটি জাভাস্ক্রিপ্ট টাইমস্ট্যাম্প তা রূপান্তর করুন।

   function epochToJsDate(ts){
        // ts = epoch timestamp
        // returns date obj
        return new Date(ts*1000);
   }

   function jsDateToEpoch(d){
        // d = javascript date obj
        // returns epoch timestamp
        return (d.getTime()-d.getMilliseconds())/1000;
   }

ভাবছিলাম পৃথিবীতে কী আছে? ইপচটাইমটি জেনে খুব ভাল ! == জাভাস্ক্রিপ্টটাইম যখন তারিখটি বিশ্লেষণের বিষয়টি আসে। ধন্যবাদ!
গ্রেডফক্স

16
 function ToLocalDate (inDate) {
    var date = new Date();
    date.setTime(inDate.valueOf() - 60000 * inDate.getTimezoneOffset());
    return date;
}

1
আপনি আমার দিন তৈরি করেছেন। TY। আমি সবেমাত্র আমার কাজের জন্য একটি চিহ্ন চিহ্ন দ্বারা বিয়োগ চিহ্নটি প্রতিস্থাপন করেছি।
লুডোভিক কিউটি

5

বর্তমান যুগের সময়কে [এমএসএ] 24 ঘন্টা সময় রূপান্তর করতে। আপনার 12 ঘন্টা ফর্ম্যাটটি অক্ষম করার জন্য বিকল্পটি নির্দিষ্ট করতে হতে পারে ।

$ node.exe -e "var date = new Date(Date.now()); console.log(date.toLocaleString('en-GB', { hour12:false } ));"

2/7/2018, 19:35:24

বা জেএস হিসাবে:

var date = new Date(Date.now()); 
console.log(date.toLocaleString('en-GB', { hour12:false } ));
// 2/7/2018, 19:35:24

console.log(date.toLocaleString('en-GB', { hour:'numeric', minute:'numeric', second:'numeric', hour12:false } ));
// 19:35:24

দ্রষ্টব্য: ব্যবহার en-GBএখানে, শুধু একটি (র্যান্ডম) 24 ঘন্টা বিন্যাস ব্যবহার একটি স্থানের পছন্দ, এটি আপনার সময় অঞ্চল নয়!


1
তারিখ পদ্ধতি থেকে যে কোনও ধরণের রূপান্তর পাওয়ার সেরা উপায় এটি। ধন্যবাদ!
সিওয়ারারিওর 404

উপরোক্ত বিষয়গুলির সাথে আমি কেবল পছন্দ করি না, এটি কি সেই अस्पष्ट বিন্যাসে তারিখটি ফেরত দেয় d/m/yyyyবা এটি m/d/yyyy? অধিকার (অধিকাংশ লজিক্যাল) এই প্রদর্শন করে হওয়া উচিত: yyyy-mm-dd। কোনো সেবার?
not2qubit

4

যুগের সময় (যেমন ইউনিক্স যুগের সময়) প্রায় সর্বদা সর্বদা 1 ম জানুয়ারী 1970 00:00:00 (ইউটিসি সময়) এর পরে শেষ হওয়া সেকেন্ডের সংখ্যা, এখানে উত্তরগুলির কয়েকটি উত্তর দ্বারা বোঝানো মিলসেকেন্ডের সংখ্যা নয় not

https://en.wikipedia.org/wiki/Unix_time

অতএব, যদি আপনাকে একটি ইউনিক্স ইপোকের সময় মূল্য দেওয়া হয় তবে এটি সম্ভবত সেকেন্ডের মধ্যে হবে এবং এটির মতো দেখতে হবে 1547035195। আপনি যদি জাভাস্ক্রিপ্টে এই মানবকে পঠনযোগ্য করে তুলতে চান তবে আপনাকে মানটি মিলি সেকেন্ডে রূপান্তর করতে হবে এবং সেই মানটি Date(value)কনস্ট্রাক্টরে পাস করতে হবে , যেমন:

const unixEpochTimeMS = 1547035195 * 1000;
const d = new Date(unixEpochTimeMS);
// Careful, the string output here can vary by implementation...
const strDate = d.toLocaleString();

আপনাকে d.setUTCMilliseconds(0)গৃহীত উত্তরের পদক্ষেপটি করতে হবে না কারণ জাভাস্ক্রিপ্ট Date(value)কনস্ট্রাক্টর মিলিসেকেন্ডে একটি ইউটিসি মান নেয় (স্থানীয় সময় নয়)।

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Syntax

এছাড়াও নোট করুন যে আপনার Date(...)কনস্ট্রাক্টর ব্যবহার করা উচিত যা স্ট্রিং ডেটটাইম উপস্থাপনা নেয়, এটি প্রস্তাবিত নয় (উপরের লিঙ্কটি দেখুন)।


3

আপনি কি কেবল ইউটিসি স্ট্রিংকে "স্থানীয়" স্ট্রিংয়ে রূপান্তর করতে বলছেন? আপনি করতে পারেন:

var utc_string = '2011-09-05 20:05:15';
var local_string = (function(dtstr) {
    var t0 = new Date(dtstr);
    var t1 = Date.parse(t0.toUTCString().replace('GMT', ''));
    var t2 = (2 * t0) - t1;
    return new Date(t2).toString();
})(utc_string);

3

উপরের উত্তরটি যোগ করুন @ ডিজেচলিন

d = '1394104654000';
new Date(parseInt(d));

EPOCH সময়কে মানব পাঠযোগ্য তারিখে রূপান্তর করে। কেবল ভুলে যাবেন না যে EPOCH ধরণের সময়টি অবশ্যই পূর্ণসংখ্যার হতে হবে।


3

আমি এর সহজ সমাধানটি খুঁজে পেয়েছি, তা হ'ল:

var timestamp = Date.now(), // returns milliseconds since epoch time
    normalisedTime = new Date(timestamp);

লক্ষ্য করুন * 1000যে এটি new Date(timestamp)বিবৃতিটির শেষে নেই কারণ এটি (আমার পক্ষে যাই হোক না কেন!) সর্বদা ভুল তারিখটি বলে মনে হয়, অর্থাৎ 2019 সালের পরিবর্তে এটি বছরটিকে 51015 হিসাবে দেয়, তাই কেবল মনে রাখবেন।


2

আপনি যদি মুহুর্ত.জেএস এর মতো লাইব্রেরি ছাড়াই ইউটিসি এবং স্থানীয় সময় থেকে টাইমস্ট্যাম্প এবং তারিখ রূপান্তরগুলি সমাধান করতে পছন্দ করেন তবে নীচের বিকল্পটি একবার দেখুন।

ইউটিসি টাইমস্ট্যাম্পগুলি ব্যবহার করে এমন অ্যাপ্লিকেশনগুলির জন্য, প্রযোজ্য ক্ষেত্রে স্থানীয় সময় অঞ্চল এবং দিবালোকের সঞ্চয় বিবেচনা করে আপনার ব্রাউজারে তারিখটি দেখাতে হতে পারে। একই টাইমজোনটি কৌশলযুক্ত হতে পারে এমন একটি তারিখ সম্পাদনা করা যা দিবালোকের সঞ্চয় সঞ্চয়ের সময় ভিন্ন।

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

এই সমাধানটি পরীক্ষা করার জন্য আমি আপনাকে নীচে কোড স্নিপেট চেক করার পরামর্শ দিই।

মিলিসেকেন্ড থেকে রূপান্তর

Number.prototype.toLocalDate = function () {
    var value = new Date(this);

    value.setHours(value.getHours() + (value.getTimezoneOffset() / 60));

    return value;
};

Number.prototype.toUTCDate = function () {
    var value = new Date(this);

    value.setHours(value.getHours() - (value.getTimezoneOffset() / 60));

    return value;
};

তারিখগুলি থেকে রূপান্তর

Date.prototype.getUTCTime = function () {
    return this.getTime() - (this.getTimezoneOffset() * 60000);
};

ব্যবহার

// Adds the timezone and daylight savings if applicable
(1499670000000).toLocalDate();

// Eliminates the timezone and daylight savings if applicable
new Date(2017, 6, 10).getUTCTime();

নিজের জন্য দেখুন


এটিই আসল উত্তর। আমার জন্য একটি কবজ মত কাজ। নতুন তারিখ নির্ধারণ (0) এবং মিলিসেকেন্ড যুক্ত করা নতুন তারিখের হিসাবে একই (মিলি সেকেন্ডস)
জার্সি_গুই

1

সম্পাদনা

var utcDate = new Date(incomingUTCepoch);
var date = new Date();
date.setUTCDate(utcDate.getDate());
date.setUTCHours(utcDate.getHours());
date.setUTCMonth(utcDate.getMonth());
date.setUTCMinutes(utcDate.getMinutes());
date.setUTCSeconds(utcDate.getSeconds());
date.setUTCMilliseconds(utcDate.getMilliseconds());

ইডিআইটি স্থির


আমি আমার দ্বিতীয় উদাহরণ এ মাধ্যমে গিয়েছিলাম। এটি আমাকে যে পার্থক্য দেয় তা 50 এবং 900 এর মধ্যে যে কোনও জায়গায়, যা মিলিসেকেন্ডে রয়েছে (গণনা প্রক্রিয়াকরণের সময় সময় প্রদর্শিত হয়, আসল পার্থক্য নয়)
শ্যান রিস্টল

তাদের কেউই আমাকে সাহায্য করেন না। তারা একটি সেটআপ্টাইম পদ্ধতি অনুপস্থিত, যা নিখুঁত হবে: P w3schools.com/jsref/jsref_obj_date.asp
শেন রিস্টেল

কমপক্ষে উবুন্টুর জন্য ফায়ারফক্সে কাজ করে না। কোড তারিখ নির্ধারণের পরে দিন / মাস / বছর নির্ধারণ করা উচিত নয়।
সাইমন কোজলভ

@ সিমন কোজলভ আসলে তারিখের অবজেক্টে একটি ভুল ধারণা অনুমান করে, সেটডেট এবং গেটডেট মাসের দিনটিকে বোঝায়, এবং সমস্যাটি হ'ল আমি (সেটআপসিডি) এর মতো ফাংশন ব্যবহার করি যা বিদ্যমান নেই, অবাক হয়ে যায় এটি গৃহীত হয়েছিল !!
আমজাদ মাসাদ

@ আমজাদমাসাদ আপনার উত্তরটি আরও সহায়ক হবে যদি আপনিও প্রত্যাশিত আউটপুট দেখান।
not2qubit

0

বিবেচনা করে, আপনি epoch_timeউপলব্ধ,

// for eg. epoch_time = 1487086694.213
var date = new Date(epoch_time * 1000); // multiply by 1000 for milliseconds
var date_string = date.toLocaleString('en-GB');  // 24 hour format


0

@ আমজাদ, ভাল ধারণা, তবে আরও ভাল বাস্তবায়ন হ'ল:

Date.prototype.setUTCTime = function(UTCTimestamp) {
    var UTCDate = new Date(UTCTimestamp);
    this.setUTCFullYear(UTCDate.getFullYear(), UTCDate.getMonth(), UTCDate.getDate());
    this.setUTCHours(UTCDate.getHours(), UTCDate.getMinutes(), UTCDate.getSeconds(), UTCDate.getMilliseconds());
    return this.getTime();
}

-1

প্রথমে এটি স্ট্রিংয়ে রূপান্তর করুন এবং তারপরে টাইমজোন পাঠ্য প্রতিস্থাপন করুন।

function convertUnixTime(time) {
  return new Date(time*1000).toString().replace("GMT+0530 (Sri Lanka Standard Time)","");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.