আমি কীভাবে জাভাস্ক্রিপ্টে ইউটিসি টাইমস্ট্যাম্প পাব?


157

একটি ওয়েব অ্যাপ্লিকেশন লেখার সময়, এটি ইউটিসি টাইমস্ট্যাম্প হিসাবে ডিবিতে সমস্ত তারিখের সময় (সার্ভার সাইড) সংরক্ষণ করে তোলে ।

আমি অবাক হয়ে গিয়েছিলাম যখন আমি লক্ষ্য করেছি যে আপনি জাভাস্ক্রিপ্টে টাইমজোন হেরফেরের ক্ষেত্রে স্থানীয়ভাবে বেশি কিছু করতে পারবেন না।

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

আপনি এখানে কোন বড় সমস্যা দেখতে পারেন? অথবা অন্য কোনও কোণ থেকে সমাধান হতে পারে?

Date.prototype.getUTCTime = function(){ 
  return new Date(
    this.getUTCFullYear(),
    this.getUTCMonth(),
    this.getUTCDate(),
    this.getUTCHours(),
    this.getUTCMinutes(), 
    this.getUTCSeconds()
  ).getTime(); 
}

এটা আমার কাছে কিছুটা বিশৃঙ্খল মনে হচ্ছে। আর পারফরম্যান্স নিয়ে আমিও তেমন নিশ্চিত নই।


আমি জানি এটি একটি পুরানো প্রশ্ন, তবে ডেট অবজেক্টের মতো নেটিভ অবজেক্টগুলি প্রসারিত না করার চেষ্টা করুন। উত্সাহিত কারণ আমি নিজেই প্রশ্ন পছন্দ করি।
ট্রাইসিস

তারিখ.পার্স (নতুন তারিখ ()। টুএসটিএসট্রিং ())
সাগি

25
এটি একটি পুরানো প্রশ্ন যা আমার ফিডে আজ উপস্থিত হয়েছিল এবং এটি ভুল তথ্য দিয়ে পূর্ণ। টাইমস্ট্যাম্প সর্বদা ইউটিসিতে থাকে। new Date().toString()আপনি বর্তমান সময় অঞ্চল সময়ের উপস্থাপনা দেখাবে new Date().toUTCString()আপনি ইউটিসি সময় repr প্রদর্শন করবে তবে new Date().getTime()হয় সবসময় ইউটিসি কারণ কি ইউনিক্স সময় হিসাবে সংজ্ঞায়িত করা হয় যে: "ইউনিক্স সময় (এছাড়াও POSIX সময় বা কাল সময় নামেও পরিচিত) instants বর্ণনা জন্য একটি সিস্টেম সময়ের সাথে সাথে, সংঘবদ্ধ ইউনিভার্সাল টাইম (ইউটিসি), বৃহস্পতিবার, 1 জানুয়ারী, ১৯০ since সাল থেকে সেকেন্ডের সংখ্যার হিসাবে সংজ্ঞায়িত, লিপ সেকেন্ড গণনা করা হয়নি। "
আমদান

উত্তর:


155
  1. এইভাবে নির্মিত তারিখগুলি স্থানীয় সময় অঞ্চল ব্যবহার করে, নির্মিত তারিখটি ভুল করে তোলে। নির্দিষ্ট তারিখের অবজেক্টের টাইমজোন সেট করার জন্য এটিকে টাইমজোন অন্তর্ভুক্ত একটি তারিখ স্ট্রিং থেকে তৈরি করা হয়। (পুরানো অ্যান্ড্রয়েড ব্রাউজারে কাজ করতে আমার সমস্যা হয়েছে))

  2. নোট করুন যে getTime()প্লে সেকেন্ডে নয়, মিলিসেকেন্ডগুলি প্রদান করে।

কোনও ইউটিসি / ইউনিক্স টাইমস্ট্যাম্পের জন্য, নিম্নলিখিতগুলি যথেষ্ট হওয়া উচিত:

Math.floor((new Date()).getTime() / 1000)

এটি ফলাফলের মধ্যে বর্তমান টাইমজোনটিকে অফসেট করবে। স্ট্রিং উপস্থাপনার জন্য, ডেভিড এলিসের উত্তর কাজ করে।

স্পষ্ট করা:

new Date(Y, M, D, h, m, s)

এই ইনপুট স্থানীয় সময় হিসাবে বিবেচনা করা হয় । যদি ইউটিসি সময়টি পাস হয় তবে ফলাফলগুলি পৃথক হবে। পর্যবেক্ষণ (আমি এখন GMT +02: 00 এ আছি, এবং এটি 07:50):

> var d1 = new Date();
> d1.toUTCString();
"Sun, 18 Mar 2012 05:50:34 GMT" // two hours less than my local time
> Math.floor(d1.getTime()/ 1000)
1332049834 

> var d2 = new Date( d1.getUTCFullYear(), d1.getUTCMonth(), d1.getUTCDate(), d1.getUTCHours(), d1.getUTCMinutes(), d1.getUTCSeconds() );
> d2.toUTCString();
"Sun, 18 Mar 2012 03:50:34 GMT" // four hours less than my local time, and two hours less than the original time - because my GMT+2 input was interpreted as GMT+0!
> Math.floor(d2.getTime()/ 1000)
1332042634

এছাড়াও নোট করুন যে getUTCDate()প্রতিস্থাপন করা যাবে না getUTCDay()। এটি কারণ মাসের দিনgetUTCDate() ফিরে আসে ; যদিও, সপ্তাহের দিনটি ফেরত দেয়getUTCDay()


1
1) আমি একটি তারিখ গঠন করা হয়নি ... আমি প্রোটোটাইপ ফাংশন যা কাজ যোগ এই । ২) ভাল কথা, আমার ম্যাথ.ফ্লোয়ার / ১০০০ করা উচিত - তবে এখনও একটি বিদ্যমান তারিখের অবজেক্টের ইউটিসি টাইমস্ট্যাম্পের জন্য আমার সেই ফাংশনটি প্রয়োজন ... ঠিক আছে?
বুধ

@ ম্যাকার: 1) আপনি কল করছেন new Date(), এটি আপনার ইউটিসি ইনপুট থেকে একটি নতুন তারিখ তৈরি করে তবে এটি স্থানীয় তারিখ / সময় হিসাবে বিবেচনা করে। 2) হ্যাঁ, আপনার Math.floor(this.getTime() / 1000)এই ক্ষেত্রে ব্যবহার করা উচিত ।
ডিসিড্ডার

কোডটি আপডেট করার প্রয়োজন হিসাবে এখানে উত্তর দিচ্ছি ... এটি একটি বিদ্যমান তারিখের জন্য ইউটিসিতে ইউনিক্স টাইমস্ট্যাম্প রাখার জন্য রয়েছে : ফাংশন () Math রিটার্ন ম্যাথ.ফ্লোয়ার (নতুন তারিখ (this.getUTCFullYear (), this.getUTCMonth (), this.getUTCDate (), this.getUTCHours (), this.getUTCMinutes (), this.getUTCSCond ()) .getTime () / 1000); } এর অর্থ আমি করতে পারি: var n = নতুন তারিখ (২০০,,10,10) ... ... n.getUTCTime (); (এই () n.getUTCTime বিভিন্ন হবে)
Merc

1
ধন্যবাদ ব্রো এর কার্যকরী ফাইল ম্যাথ.ফ্লুর ((নতুন তারিখ ())। গেটটাইম () / 1000)
মনোজ প্যাটেল

51

আপনি এটি getTimezoneOffset এবং getTime ব্যবহার করেও করতে পারেন,

x = new Date()
var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000)/1000;

console.log("UTCseconds", UTCseconds)


4
ধন্যবাদ, ইন্টারনেটে এটি কোথাও পাওয়া যায় না!
থিওফানিস প্যান্টালাইডস 1

আমি নিম্নলিখিত কোড পরীক্ষা: var tt = new Date('Thu Jan 01 1970 08:00:00 GMT+0800 (China Standard Time)'); (tt.getTime() - tt.getTimezoneOffset()*60*1000)/1000। এটি tt.getTime() - tt.getTimezoneOffset()সঠিক বলে মনে হচ্ছে GMT+0800
zangw

1
এটি আরও ভালvar UTCseconds = (Math.floor(x.getTime()/1000) + x.getTimezoneOffset()*60)
স্টেফানসআর্যা

দেখে মনে হচ্ছে এটি লিখিতভাবে কাজ করে না .. দেখে মনে হচ্ছে আপনাকে সময়সীমার মধ্যে যেতে হবে যাতে new Date()একটি টাইমজোন অন্তর্ভুক্ত
রয়েছে..যে কিন্ডা জেএস

এই কেবল ভুল, নির্ধারিত মান UTCseconds নয় ইউটিসি সেকেন্ড .. একটি তারিখ এর সময় মান হয় ইউটিসি যাই হোক না কেন পদ্ধতি মানে এটা সময় একটি ভিন্ন মুহূর্তে প্রতিনিধিত্ব করে তা পরিবর্তন।
রবিজি

34

প্রচলিত ফর্ম্যাটে ইউটিসি সময় পাওয়ার সহজতম উপায়টি হ'ল:

new Date().toISOString()
"2016-06-03T23:15:33.008Z"

3
এটা সঠিক উত্তর. প্রচুর অন্যান্য উত্তর একটি "সর্বজনীন সময় স্ট্রিং" দেয় তবে বর্তমান "সার্বজনীন সমন্বিত সময়" দেয় না। এখানে সবকিছু এত জটিল কেন বুঝতে পারছি না।
gburton

আপনাকে @gburton ধন্যবাদ। সত্যের সহজ উপায়টি দেখে প্রশংসা করুন। :)
তাহসিন তুরকোজ

1
YYYY-MM-DD তারিখ ভিত্তিক তুলনা করার জন্য আমি ".স্প্লিট ('টি') [0]" সহ এটি ব্যবহার করি use
শান হে

@ সিয়ানাও পেয়ে ভাল লাগল
তাহসিন তুরোকোজ

এটি একটি ইউটিসি সময় স্ট্রিং সরবরাহ করে, তবে ওপি একটি ইউটিসি টাইমস্ট্যাম্পের জন্য জিজ্ঞাসা করছে (যুগ)
জর্ডি নেবোট

13

আমি আসলে জেএসে তারিখের মানগুলি সি # ডেটটাইম অবজেক্ট বলার চেয়ে অনেক ভাল বলে মনে করি। সি # ডেটটাইম অবজেক্টগুলির একটি প্রকার সম্পত্তি রয়েছে তবে এর মতো কোনও কঠোর অন্তর্নিহিত টাইম জোন এবং টাইম জোনের রূপান্তরগুলি ট্র্যাক করা যদি আপনি দুটি ইউটিসি এবং স্থানীয় নয় এমন দুটি সময়ের মধ্যে রূপান্তর করেন তবে তা ট্র্যাক করা কঠিন। জেএসে, সমস্ত তারিখের মানগুলির একটি অন্তর্নিহিত ইউটিসি মান থাকে যা আপনার কাছ থেকে অফসেট বা টাইম অঞ্চল রূপান্তর নির্বিশেষে চারপাশে পাস হয়ে যায় এবং পরিচিত known ডেট অবজেক্ট সম্পর্কে আমার সবচেয়ে বড় অভিযোগ হ'ল ব্রাউজার প্রয়োগকারীরা অন্তর্ভুক্ত করার জন্য যে অপরিজ্ঞাত আচরণটি বেছে নিয়েছে, যা জেসে তারিখগুলিতে আক্রমণ করে এমন লোকদের বিভ্রান্ত করতে পারে যা পরীক্ষাটি পড়ার চেয়ে পরীক্ষায় এবং ত্রুটির সাথে যুক্ত হয়। Iso8601.js এর মতো কিছু ব্যবহার করে ডেট অবজেক্টের একক বাস্তবায়ন সংজ্ঞায়িত করে এই পরিবর্তিত আচরণকে সমাধান করে।

ডিফল্ট হিসাবে, অনুমানটি বলে যে আপনি বর্ধিত আইএসও 8601 তারিখের ফর্ম্যাটের মতো তারিখগুলি তৈরি করতে পারেন

var someDate = new Date('2010-12-12T12:00Z');

সুতরাং আপনি এইভাবে সঠিক ইউটিসির সময় নির্ধারণ করতে পারেন।

আপনি যখন সার্ভারের তারিখ মানটি পাস করতে চান তখন আপনি কল করবেন

someDate.toISOString();

অথবা আপনি যদি মিলিসেকেন্ড টাইমস্ট্যাম্পের সাথে কাজ করতে চান (1 জানুয়ারি 1970 ইউটিসি থেকে মিলিসেকেন্ডের সংখ্যা)

someDate.getTime();

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

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

সুতরাং, সংক্ষেপে, সময় অঞ্চল ম্যানিপুলেশনের জন্য অনেক দেশীয় সমর্থন না হওয়ার কারণ হ'ল আপনি কেবল এটি করতে চান না।


12

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

বর্তমান ইউটিসি সময় পেতে:

function getCurrentTimeUTC()
{
    //RETURN:
    //      = number of milliseconds between current UTC time and midnight of January 1, 1970
    var tmLoc = new Date();
    //The offset is in minutes -- convert it to ms
    return tmLoc.getTime() + tmLoc.getTimezoneOffset() * 60000;
}

তারপরে আপনার যা সাধারণভাবে প্রয়োজন তা হ'ল শেষ-ব্যবহারকারীর স্থানীয় সময় অঞ্চল এবং বিন্যাসের জন্য তারিখ / সময় বিন্যাস করা। নিম্নলিখিতটি ক্লায়েন্ট কম্পিউটারে তারিখ এবং সময় ফর্ম্যাটগুলির সমস্ত জটিলতার যত্ন করে:

function formatDateTimeFromTicks(nTicks)
{
    //'nTicks' = number of milliseconds since midnight of January 1, 1970
    //RETURN:
    //      = Formatted date/time
    return new Date(nTicks).toLocaleString();
}

function formatDateFromTicks(nTicks)
{
    //'nTicks' = number of milliseconds since midnight of January 1, 1970
    //RETURN:
    //      = Formatted date
    return new Date(nTicks).toLocaleDateString();
}

function formatTimeFromTicks(nTicks)
{
    //'nTicks' = number of milliseconds since midnight of January 1, 1970
    //RETURN:
    //      = Formatted time
    return new Date(nTicks).toLocaleTimeString();
}

সুতরাং নিম্নলিখিত উদাহরণ:

var ticks = getCurrentTimeUTC();  //Or get it from the server

var __s = "ticks=" + ticks + 
    ", DateTime=" + formatDateTimeFromTicks(ticks) +
    ", Date=" + formatDateFromTicks(ticks) +
    ", Time=" + formatTimeFromTicks(ticks);

document.write("<span>" + __s + "</span>");

নিম্নলিখিতগুলি (আমার মার্কিন ইংরেজি স্থানীয় লোকের জন্য) প্রদান করে:

টিক্স = 1409103400661, তারিখটাইম = 8/26/2014 6:36:40 অপরাহ্ন, তারিখ = 8/26/2014, সময় = 6: 36: 40 পিএম


1
getTimezoneOffsetআপনার getCurrentTimeUTCফাংশনটিতে মান যুক্ত করে , আপনি আসলে সময়ের সাথে একটি ভিন্ন পয়েন্ট ফিরিয়ে দিচ্ছেন। ফল getTimeহয় ইতিমধ্যে ইউটিসি হবে।
ম্যাট জনসন-পিন্ট

1
@ ম্যাট জনসন: এটি ভুল। এর ফলাফল tmLoc.getTime()স্থানীয় সময়ের বিপরীতে অফসেট। আপনার জাভাস্ক্রিপ্ট চালায় এমন কোনও কিছুর অ্যাক্সেস আছে কিনা তা যাচাই করা সহজ।
ahmd0

2
দুঃখিত, তবে এটি সত্য নয়। দেখুন MDN রেফারেন্স । আপনি এটি ECMAScript বিশেষেও দেখতে পারেন। §15.9.3.3 বর্ণনা করেgetTime , যা আপনাকে time15.9.5 এ সংজ্ঞায়িত "সময় মান" এ নির্দেশ করে , যা ইউটিসি হিসাবে as15.9.3.3 হিসাবে সুস্পষ্টভাবে PrimitiveValueসেট করা হয় a
ম্যাট জনসন-পিন্ট

2
ঠিক আছে, যেহেতু আপনি tmLocমাধ্যমে পাচ্ছেন new Date(), তবে এটি একই জিনিস। সময় অঞ্চলটি স্ট্রিং আউটপুট tmLoc.toString()এবং অনুরূপ আইটেমগুলিকে প্রভাবিত করবে, তবে এটি tmLoc.getTime() ইউটিসিতে 1970-01-01 মধ্যরাত থেকে সর্বদা কেবলমাত্র কয়েক মিলিসেকেন্ডকে প্রভাবিত করবে না ।
ম্যাট জনসন-পিন্ট

1
@ স্টেফানসআর্যা://The offset is in minutes -- convert it to ms
আহমদ 0

5

আমি এটি একটি ভাল সমাধান বলে মনে করি

// UTC milliseconds
new Date(Date.now()+(new Date().getTimezoneOffset()*60000)).getTime()

// UTC seconds
new Date(Date.now()+(new Date().getTimezoneOffset()*60000)).getTime()/1000|0

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

4

আপনি যদি একটি চান এক মাছ ধরার নৌকা , ইউটিসি ইউনিক্স টাইমস্ট্যাম্প যেমন জাভাস্ক্রিপ্ট তৈরি করা যেতে পারে:

var currentUnixTimestap = ~~(+new Date() / 1000);

এটি সিস্টেমের সময় অঞ্চল বিবেচনা করবে। এটি মূলত যুগের পর থেকে দ্বিতীয় সেকেন্ডে সময় কেটে যায়।

কিভাবে এটা কাজ করে:

  • তারিখ বস্তুর তৈরি করুন: new Date()
  • রূপান্তর করতে unary +অবজেক্ট তৈরির আগে যোগ করে টাইমস্ট্যাম্পে রূপান্তর করুন timestamp integer। : +new Date()
  • মিলিসেকেন্ডগুলিকে সেকেন্ডে রূপান্তর করুন: +new Date() / 1000
  • পূর্ণসংখ্যার মানটি বন্ধ করতে ডাবল টিল্ড ব্যবহার করুন । :~~(+new Date())

7
এটি tilde, না tilda(sic)। দুঃখজনকভাবে এটি আমাকে একটি টাইপো সরাতে দেয় না, আমাকে কমপক্ষে 6 টি চরিত্রের সম্পাদনা করতে হবে। স্মুথ, স্ট্যাকেক্সচেঞ্জ, মসৃণ
ফ্রেড

3
এটি ব্যবহার করবেন না । বর্তমান একমা স্পেসের সাথে, বিটওয়াইস ক্রিয়াকলাপগুলি (টিলড - বিটওয়াইসের মতো নয়) 32 বিটের স্বাক্ষরযুক্ত পূর্ণসংখ্যার মানগুলি পরিচালনা করে। তার মানে এই টিলড যাদুটি 19 জানুয়ারী 2038 এর পরে কাজ করবে না যখন টাইমস্ট্যাম্পের মান 32 বিট স্বাক্ষরিত পূর্ণসংখ্যার সর্বোচ্চ মানের চেয়ে বেশি হবে। jsfiddle.net/phb20ymb
Sharky

3

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

অন্য কথায়, সমস্ত ইউটিসি জাভাস্ক্রিপ্ট ফাংশন নিয়ে বিরক্ত করবেন না। পরিবর্তে, কেবল ডেট.জেটটাইম () ব্যবহার করুন।

ব্যাখ্যায় আরও তথ্য এখানে: জাভাস্ক্রিপ্ট হলে "(নতুন তারিখ ())। গেটটাইম ()" 2 টি আলাদা টাইমজোন থেকে চালিত হয়।


3

আমি নিম্নলিখিত ব্যবহার:

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

এই পদ্ধতিটি একবার নির্ধারণ করে আপনি এটি করতে পারেন:

var utcTime = new Date().getUTCTime();

সবচেয়ে পরিষ্কার সমাধান। ধন্যবাদ!
তুষারপাত 1

তবে এটি তারিখগুলি প্রেরণের কোনও পরিষ্কার সমাধান নয়, কারণ টাইমস্ট্যাম্পগুলি সর্বদা ইউটিসি থাকে। তারিখ প্রেরণের জন্য আমার পক্ষে সর্বোত্তম সমাধান হ'ল "ডিডি / এমএম / ইয়াই এইচ: মিমি: এসএস" এর মতো স্ট্রিং প্রতিনিধিত্ব ব্যবহার করা এবং তারপরে একটি ইউটিসি টাইমস্ট্যাম্প বা যা কিছু পেতে সার্ভারের ডিফল্ট টাইমজোন সহ সার্ভারের পাশে পার্স করা। এই উত্তরটি
jlbofh

2
একটি স্ট্রিং পার্সিং - আপনি যে পরিষ্কার কল? মেহ
তুষারপাত

নিশ্চিত হন, আইএসও স্পেসিফিকেশন অনুসারে স্ট্রিং ফর্ম্যাটে একটি তারিখ উত্পন্ন করার পদ্ধতি রয়েছে। পদ্ধতিটি আইওএসএসটিং ()। আপনি জাভাতে এর মতো কিছু ব্যবহার করে এটি পরিষ্কারভাবে পার্স করতে পারেন:DateTime dt = new DateTime ("2018-07-15T02:36:00+02:00");
jlbofh

অন্য একটি ভুল উত্তর, this.getTime()একটি ইউটিসি অফসেট ফেরত দেয়, স্থানীয় টাইমজোন অফসেট বিয়োগ করে এটি স্থানীয় করে তোলে, ইউটিসি নয় তাই গটআউটটিমে একটি ইউটিসি নয়, একটি স্থানীয় অফসেট দেয়।
রবিজি

2

এই প্রশ্নটি কতটা জটিল হয়ে উঠেছে তাতে আমি অবাক হয়েছি।

এগুলি সমস্ত অভিন্ন, এবং তাদের পূর্ণসংখ্যার মানগুলি সমস্ত === EPOCH সময়: ডি

console.log((new Date()).getTime() / 1000, new Date().valueOf() / 1000, (new Date() - new Date().getTimezoneOffset() * 60 * 1000) / 1000);

আমাকে বিশ্বাস করবেন না, চেকআউট: http://www.epochconverter.com/


2

যেহেতু new Date().toUTCString()একটি স্ট্রিং ফেরত দেয় "Wed, 11 Oct 2017 09:24:41 GMT"আপনি শেষ 3 টি অক্ষর টুকরো টুকরো করে কেটে ফেলতে পারেন new Date():

new Date()
// Wed Oct 11 2017 11:34:33 GMT+0200 (CEST)

new Date(new Date().toUTCString().slice(0, -3))
// Wed Oct 11 2017 09:34:33 GMT+0200 (CEST)

1

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

প্রথমত, আপনার দুর্দান্ত অন্তর্দৃষ্টি জন্য আপনাকে ধন্যবাদ। আমার ধারণা আমার প্রশ্নের ভুল শিরোনাম ছিল ... এটি "বিদ্যমান তারিখের জন্য ইউটিসি ইউনিক্স টাইমস্ট্যাম্প পান" হওয়া উচিত ছিল।

সুতরাং, আমার যদি একটি তারিখ অবজেক্ট থাকে:

var d = new Date(2009,01,31)

আমি এমন একটি অনুষ্ঠানের পরে ছিলাম যা আমাকে "দ্য ইউটিসি ইউনিক্স টাইমস্ট্যাম্প" বলবে।

এই ফাংশনটি আসল কৌশল বলে মনে হচ্ছে:

Date.prototype.getUTCUnixTime =  function (){
  return Math.floor( new Date(
    this.getUTCFullYear(),
    this.getUTCMonth(),
    this.getUTCDate(),
    this.getUTCHours(),
    this.getUTCMinutes(), 
    this.getUTCSeconds()
  ).getTime() / 1000); 
}

মনে রাখবেন যে এটি "এটি" তে কাজ করে এর অর্থ এটি আমি করতে পারি:

var n = new Date(2008,10,10)
...
...

n.getUTCUnixTime();

এবং ইউনিক্স সময়ে প্রথম জানুয়ারী 1970 এর পরে সেকেন্ডের সংখ্যা পান। রাইট?

এটি আমার কাছে একটু উন্মাদ, জাভাস্ক্রিপ্টটি ইউটিসি সময়ে সমস্ত কিছু সঞ্চয় করে, তবে তারপরে এই নম্বরটি পেতে আমাকে পৃথক ইউটিসি গেটারগুলি পাস করে একটি নতুন ডেট অবজেক্ট তৈরি করতে হবে এবং শেষ পর্যন্ত তার জন্য গেটটাইম () কল করুন ...

Merc।


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

1
উঘ আপনি ঠিক বলেছেন, কেবল তাদের দেখেছি। (প্রাচীরের বিরুদ্ধে মাথা
বেঁধে

1

আমি মনে করি এটি আপনি যা প্রত্যাশা করছেন ...

var currTimestamp = Date.now(), //1482905176396
    utcDateString = (new Date(currTimestamp)).toUTCString(); //"Wed, 28 Dec 2016 06:06:50 GMT"

এখন,

new Date(utcDateString).getTime(); //This will give you UTC Timestamp in JavaScript

0

একবার আপনি এই কাজ

new Date(dateString).getTime() / 1000

এটি ইতিমধ্যে ইউটিসি টাইম স্ট্যাম্প

   const getUnixTimeUtc = (dateString = new Date()) => Math.round(new Date(dateString).getTime() / 1000)

আমি https://www.unixtimestamp.com/index.php এ পরীক্ষা করেছি


0

Day.js ব্যবহার করে

ব্রাউজারে:

dayjs.extend(dayjs_plugin_utc)
console.log(dayjs.utc().unix())
<script src="https://cdn.jsdelivr.net/npm/dayjs@latest/dayjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@latest/plugin/utc.js"></script>

নোড.জেএস এ:

import dayjs from 'dayjs'
dayjs.extend(require('dayjs/plugin/utc'))
console.log(dayjs.utc().unix())

আপনি মিলিসেকেন্ড ছাড়াই একটি ইউটিসি ইউনিক্স টাইমস্ট্যাম্প পাবেন।


-2

এটি ইউটিসিতে টাইমস্ট্যাম্পটি ফিরিয়ে দেবে:

var utc = new Date(new Date().toUTCString()).getTime();


2
এটি ইউটিসি-তে সময় ফিরিয়ে দেয় না: new Date(new Date().toUTCString())বুধ অক্টোবর 2017 দেয় 07:20:14 GMT + 0200 (GMT + 02: 00)
বাস ভ্যান ডিজক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.