আমি কীভাবে জাভাস্ক্রিপ্টে টাইমজোন নাম পেতে পারি?


116

টাইমজোনটি অফসেট কীভাবে পাবেন তা আমি জানি তবে আমার যা প্রয়োজন তা হল "আমেরিকা / নিউ ইয়র্ক" এর মতো কোনও কিছু সনাক্ত করার দক্ষতা। এটি কি জাভাস্ক্রিপ্ট থেকেও সম্ভব বা এটি আমি অফসেটের উপর ভিত্তি করে অনুমান করতে যাচ্ছি something


2
এখানে একটি ফাংশন জন Nylander লিখেছেন, হয়তো এটা সাহায্য করে bitbucket.org/pellepim/jstimezonedetect
yunzen

এখানে একটি সম্পর্কিত উত্তর যা সহায়তা করতে পারে: stackoverflow.com/a/19421672/1447034
ডগলাস

উত্তর:


239

আন্তর্জাতিকীকরণ এপিআই সমর্থন ব্যবহারকারী টাইমজোন পেয়ে, এবং হয় সমর্থিত সমস্ত বর্তমান ব্রাউজারে।

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)

মনে রাখবেন যে কিছু পুরানো ব্রাউজার সংস্করণ যা আন্তর্জাতিকীকরণ এপিআই সমর্থন করে, ব্যবহারকারীর টাইমজোন স্ট্রিংয়ের পরিবর্তে timeZoneসম্পত্তি সেট করা আছে undefined। আমি যতটা বলতে পারি, লেখার সময় (জুলাই 2017) আইই 11 ব্যতীত সমস্ত বর্তমান ব্রাউজার ব্যবহারকারীর টাইমজোনকে স্ট্রিং হিসাবে ফিরিয়ে দেবে।


6
কখনও ভাবিনি এটি এত সহজ
মোহাম্মদ শরীফ সি

5
দুর্দান্ত, প্রথমটি আমি দেখেছি যা মুহূর্তগুলি ব্যবহার করে না! ধন্যবাদ
r0bb077

3
দুর্দান্ত সমাধান। এর জন্য পুরো মুহুর্তের টাইমজোন প্লাগইনটি অন্তর্ভুক্ত করতে চায়নি।
জোয়ান গিল

1
খুব সহজ এবং চমৎকার সমাধান!
কালোইইই

2
@ ড্যানিয়েলকম্পটন ওহ, আমি এই টেবিলটি সম্পর্কে জানতাম না, এটি আবার সংশোধন করার জন্য ধন্যবাদ।
কমনসেন্সকোড

9

সর্বাধিক উত্সাহিত উত্তর সম্ভবত টাইমজোনটি পাওয়ার সবচেয়ে ভাল উপায়, তবে, Intl.DateTimeFormat().resolvedOptions().timeZoneইংরেজিতে সংজ্ঞা অনুসারে আইএএনএ টাইমজোন নামটি দেয়।

আপনি যদি বর্তমান ব্যবহারকারীর ভাষায় টাইমজোনটির নাম চান তবে আপনি এটির Dateস্ট্রিং প্রতিনিধিত্ব থেকে এটি পার্স করতে পারেন :

function getTimezoneName() {
  const today = new Date();
  const short = today.toLocaleDateString(undefined);
  const full = today.toLocaleDateString(undefined, { timeZoneName: 'long' });

  // Trying to remove date from the string in a locale-agnostic way
  const shortIndex = full.indexOf(short);
  if (shortIndex >= 0) {
    const trimmed = full.substring(0, shortIndex) + full.substring(shortIndex + short.length);
    
    // by this time `trimmed` should be the timezone's name with some punctuation -
    // trim it from both sides
    return trimmed.replace(/^[\s,.\-:;]+|[\s,.\-:;]+$/g, '');

  } else {
    // in some magic case when short representation of date is not present in the long one, just return the long one as a fallback, since it should contain the timezone's name
    return full;
  }
}

console.log(getTimezoneName());

ক্রোম এবং ফায়ারফক্সে পরীক্ষিত।

অবশ্যই, এটি কিছু পরিবেশে যেমন ইচ্ছা তেমন কাজ করবে না। উদাহরণস্বরূপ, নোড.জেএস GMT+07:00নামের পরিবর্তে একটি জিএমটি অফসেট (উদাঃ ) প্রদান করে। তবে আমি মনে করি এটি ফলব্যাক হিসাবে এখনও পঠনযোগ্য।

PS যেমন Intl...সমাধান হিসাবে আইই 11 এ কাজ করবে না ।


6

আপনি এই স্ক্রিপ্ট ব্যবহার করতে পারেন। http://pellepim.bitbucket.org/jstz/

কাঁটাচামচ বা ক্লোন সংগ্রহস্থল এখানে। https://bitbucket.org/pellepim/jstimezonedetect

একবার আপনি স্ক্রিপ্ট অন্তর্ভুক্ত করার পরে, আপনি - jstz.olson.timezonesভেরিয়েবলের সময় অঞ্চলগুলির তালিকা পেতে পারেন ।

এবং ক্লায়েন্ট ব্রাউজারের সময় অঞ্চল নির্ধারণ করতে নিম্নলিখিত কোড ব্যবহার করা হয়।

var tz = jstz.determine();
tz.name();

Jstz উপভোগ করুন!


3

নাম অনুসারে টাইমজোন পুনরুদ্ধার করুন (যেমন "আমেরিকা / নিউ ইয়র্ক")

moment.tz.guess();

9
দয়া করে উল্লেখ করুন যে কোনও নির্ভরতা ছাড়াই এটিও সহজভাবে সম্ভব:Intl.DateTimeFormat().resolvedOptions().timeZone
ইউজার 2923322

1
হ্যাঁ, যদিও মুহুর্ত-জেএসগুলি "ব্রাউজারগুলি" এর জন্য টিজেডেরও অনুমান করে যা এই বৈশিষ্ট্যটি সমর্থন করে না। :)
ফেরান মেলিনঞ্চ

আইই ১১- Intl.DateTimeFormat().resolvedOptions().timeZoneএ ফেরত দেয় undefined, তবে moment.tz.guess()সঠিক মানটি দেয়
আন্তনি

0

আপনি ম্যাপিং টেবিলটি এখানে সহজেই নিজের কোডটি লিখতে পারেন: http://www.timeanddate.com/time/zones/

বা, মুহূর্ত-সময় অঞ্চল লাইব্রেরি ব্যবহার করুন: http://momentjs.com/timezone/docs/

দেখা zone.name; // America/Los_Angeles

বা, এই গ্রন্থাগার: https://github.com/Canop/tzdetect.js



0

এটি GMTপুরানো জাভাস্ক্রিপ্টে টাইমজোন কোড পায় (যেমন, ) পুরানো ইঞ্জিন সহ আমি গুগল অ্যাপ স্ক্রিপ্ট ব্যবহার করছি):

function getTimezoneName() {
  return new Date().toString().get(/\((.+)\)/);
}

কারওর প্রয়োজন হলে আমি এটি এখানে রাখছি।


1
আমি মনে করি যে কেবল UTC/ এর জন্য কাজ করে GMT। দেখে মনে হচ্ছে অন্যদের বানান হয়েছে; যেমন Pacific Daylight Time,।
ইয়ান ডান

-1

এই কোডটি এখান থেকে উল্লেখ করার চেষ্টা করুন

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js">
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.4/jstz.min.js">
</script>
<script type="text/javascript">
  $(document).ready(function(){
    var tz = jstz.determine(); // Determines the time zone of the browser client
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time.

    alert(timezone);
});
</script>

-5

জাভাস্ক্রিপ্টে, ডেট.জেটটাইমজোনঅফসেট () পদ্ধতিটি ইউটিসি থেকে টাইম-জোন অফসেটটি বর্তমান লোকেলের জন্য কয়েক মিনিটের মধ্যে ইউটিসি থেকে ফিরিয়ে দেয়।

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

মোমেন্ট'টাইমজোন একটি দরকারী সরঞ্জাম হবে। http://momentjs.com/timezone/

সময় অঞ্চলগুলির মধ্যে তারিখগুলি রূপান্তর করুন

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

4
আপনি কি বুঝতে পারেন না।
srsajid

3
আপনার কোড নমুনাগুলি মূল প্রশ্নের সাথে সম্পর্কিত নয়। ব্যবহারকারীর বর্তমান সময় অঞ্চলটির নাম ফিরিয়ে আনতে আপনি কীভাবে এই গ্রন্থাগারটি ব্যবহার করবেন?
জো হোয়াইট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.