আমি কীভাবে দর্শকের সময় অঞ্চল তথ্য সংগ্রহ করতে পারি? আমার টাইমজোন যেমন GMT অফসেট সময় প্রয়োজন।
আমি কীভাবে দর্শকের সময় অঞ্চল তথ্য সংগ্রহ করতে পারি? আমার টাইমজোন যেমন GMT অফসেট সময় প্রয়োজন।
উত্তর:
var offset = new Date().getTimezoneOffset();
console.log(offset);
টাইম-জোন অফসেটটি ইউটিসি এবং স্থানীয় সময়ের মধ্যে কয়েক মিনিটের মধ্যে পার্থক্য। মনে রাখবেন যে এর অর্থ অফসেটটি ইতিবাচক যদি স্থানীয় সময় অঞ্চলটি ইউটিসির পিছনে থাকে এবং যদি এগিয়ে থাকে তবে এটি নেতিবাচক হয়। উদাহরণস্বরূপ, যদি আপনার সময় অঞ্চলটি ইউটিসি + 10 (অস্ট্রেলিয়ান পূর্ব স্ট্যান্ডার্ড সময়) হয়, -600 ফিরে আসবে। দিবালোকের সঞ্চয় সময় এই প্রদত্ত লোকেলের জন্যও এই মানটিকে ধ্রুবক হতে বাধা দেয়
মনে রাখবেন যে সমস্ত টাইম অঞ্চলগুলি পুরো ঘন্টা দ্বারা অফসেট হয় না: উদাহরণস্বরূপ, নিউফাউন্ডল্যান্ডটি ইউটিসি বিয়োগ 3h 30 মি (সমীকরণের বাইরে ডাইটলাইট সেভিংয়ের সময়কে ছেড়ে যায়)।
getTimezoneOffset
কার্যকর হয়? আপনি যে নিবন্ধটি উল্লেখ করছেন এটি জুন 2007 এর তারিখ এবং এতে কীভাবে কার্যকারিতাটি সঠিক নয় তার কোনও বিবরণ নেই। এবং প্রকৃতপক্ষে jsTimezoneDetect
আপনি চিহ্নিত লাইব্রেরিটি getTimezoneOffset
নিজেই ব্যবহার করে।
var hrs = -(new Date().getTimezoneOffset() / 60)
সাধারণত ব্যবহৃত ঘন্টাগুলিতে অফসেট পেতে
timezone
! =utc offset
টাইমজোন গণনা করার জন্য অফসেট ব্যবহার করা একটি ভুল পদ্ধতি, এবং আপনি সর্বদা সমস্যার সম্মুখীন হন। সময়ের জোন এবং দিবালোক সংরক্ষণের নিয়মগুলি এক বছরে বেশ কয়েকটি উপলক্ষে পরিবর্তিত হতে পারে এবং পরিবর্তনগুলি ধরে রাখা শক্ত।
জাভাস্ক্রিপ্টে সিস্টেমের আইএএনএ টাইমজোন পেতে আপনার ব্যবহার করা উচিত
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
ইকমা -402 / 1.0 বলছে যে timeZone
কনস্ট্রাক্টরকে সরবরাহ না করা থাকলে অপরিজ্ঞাত হতে পারে। তবে, ভবিষ্যতের খসড়া (3.0) সিস্টেম ডিফল্ট টাইমজোন পরিবর্তন করে এই সমস্যাটিকে স্থির করেছে।
ইসমাস্ক্রিপ্ট ইন্টারন্যাশনালাইজেশন এপিআই-র এই সংস্করণে, কনস্ট্রাক্টরকে সরবরাহ করা বিকল্পগুলির মধ্যে
timeZone
কোনওtimeZone
সম্পত্তি সরবরাহ না করা থাকলে সম্পত্তি অপরিজ্ঞাত থাকবেIntl.DateTimeFormat
। তবে অ্যাপ্লিকেশনগুলিতে এটির উপর নির্ভর করা উচিত নয়, কারণ ভবিষ্যতের সংস্করণগুলি তার পরিবর্তে হোস্ট পরিবেশের বর্তমান সময় অঞ্চল সনাক্তকরণের জন্য একটি স্ট্রিং মান প্রদান করতে পারে।
একমা -402 / 3.0 এ যা এখনও একটি খসড়ায় রয়েছে এটিতে পরিবর্তিত হয়েছে
ECMAScript 2015 আন্তর্জাতিকীকরণ API এর এই সংস্করণে, কনস্ট্রাক্টরকে সরবরাহ করা বিকল্প বিকল্পগুলিতে
timeZone
কোনওtimeZone
সম্পত্তি সরবরাহ না করা থাকলে সম্পত্তিটি ডিফল্ট সময় অঞ্চলটির নাম হবেIntl.DateTimeFormat
। পূর্ববর্তী সংস্করণtimeZone
সম্পত্তি এক্ষেত্রে অপরিশোধিত রেখে গেছে ।
আমি বুঝতে পেরেছি যে এই উত্তরটি কিছুটা সাময়িক বিষয় নয় তবে আমি কল্পনা করেছি যে আমাদের মধ্যে অনেকের উত্তর সন্ধানের জন্য সময় অঞ্চলটি প্রদর্শনের জন্যও ফর্ম্যাট করতে চেয়েছিল এবং সম্ভবত অঞ্চলটির সংক্ষিপ্তকরণও পেতে চাই। সুতরাং এখানে এটি ...
আপনি যদি ক্লায়েন্টের সময় অঞ্চলটি সুন্দরভাবে ফর্ম্যাট করতে চান তবে আপনি জাভাস্ক্রিপ্ট ডেট.টোস্ট্রিং পদ্ধতিতে নির্ভর করতে পারেন এবং করতে পারেন:
var split = new Date().toString().split(" ");
var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1];
এটি আপনাকে "GMT-0400 (EST)" দেবে উদাহরণস্বরূপ, প্রযোজ্য সময়সীমা মিনিট সহ।
বিকল্পভাবে, রেজেক্সের সাহায্যে আপনি যে কোনও পছন্দসই অংশটি বের করতে পারেন:
"GMT-0400 (EDT)" এর জন্য:
new Date().toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1]
"GMT-0400" এর জন্য:
new Date().toString().match(/([A-Z]+[\+-][0-9]+)/)[1]
কেবল "ইডিটি" এর জন্য:
new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1]
কেবল "-0400" এর জন্য:
new Date().toString().match(/([-\+][0-9]+)\s/)[1]
তারিখ.আর স্ট্রিং রেফারেন্স: https://developer.mozilla.org/en/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / তারিখ / টো স্ট্রিং
split[4] + " " + split[5]
?!
split
রয়েছে: ["Mon", "Mar", "13", "2017", "14:05:22", "GMT-0400", "(Eastern", "Daylight", "Time)"]
সুতরাং ফলাফলটি হলDaylight Time)
new Date().toString()
আপনার স্থানীয় সেটিংসের উপর সম্পূর্ণ নির্ভর করে এটি আসলে ভাল ধারণা নয় । আপনার অনুরূপ অন্যান্য ক্লায়েন্টদের আউটপুট আশা করা খুব খারাপ ধারণা।
এটি ইতিমধ্যে উত্তর হিসাবে দেওয়া হয়েছে কীভাবে একটি পূর্ণসংখ্যার হিসাবে মিনিটের মধ্যে অফসেট পাবেন, তবে যদি কেউ স্থানীয় জিএমটি স্ট্রিং হিসাবে অফসেট চায় যেমন "+1130"
:
function pad(number, length){
var str = "" + number
while (str.length < length) {
str = '0'+str
}
return str
}
var offset = new Date().getTimezoneOffset()
offset = ((offset<0? '+':'-')+ // Note the reversed sign!
pad(parseInt(Math.abs(offset/60)), 2)+
pad(Math.abs(offset%60), 2))
pad(parseInt(Math.abs(offset/60)), 2)
এটি সঠিক হওয়ার জন্য আপনার প্রথম প্যাডিংয়ের বদলে নেওয়া দরকার ... অন্যথায় আপনি আমার ক্ষেত্রে যেমন +5.530 পেয়ে যাবেন ... আমি নিশ্চিত নই যে এখানে গণিতের তল ইত্যাদি আরও ভাল জিনিস হবে কি না .... তবে এটি কমপক্ষে আমাকে প্রত্যাশা অনুযায়ী +0530 দেয়
তুমি ব্যবহার করতে পার:
<script src="moment.js"></script>
<script src="moment-timezone-with-data.js"></script>
// retrieve timezone by name (i.e. "America/Chicago")
moment.tz.guess();
ব্রাউজারের সময় অঞ্চল সনাক্তকরণ সঠিক হয়ে উঠার চেয়ে জটিল, কারণ ব্রাউজারের দেওয়া খুব কম তথ্য দেওয়া আছে।
মোমেন্ট টাইমজোন ব্যবহার Date.getTimezoneOffset()
এবং Date.toString()
চলতি প্রায় মুহূর্তের একটি থাবা উপর যতটা সম্ভব ব্রাউজার পরিবেশ সম্পর্কে অনেক তথ্য সংগ্রহ করতে। এটি তখন সমস্ত সময় অঞ্চল ডেটা লোড হওয়া তথ্যের সাথে তুলনা করে এবং নিকটতম ম্যাচটি প্রদান করে। সম্পর্কের ক্ষেত্রে, সবচেয়ে বেশি জনসংখ্যার শহরটির সাথে সময় অঞ্চলটি ফিরে আসে।
console.log(moment.tz.guess()); // America/Chicago
আমি আমার প্রকল্পে একটি ফাংশন লিখেছি, যা টাইমজোনকে hh:mm
ফর্ম্যাটে ফিরিয়ে দেয় । আমি আশা করি এটি কারও সহায়ক হতে পারে:
function getTimeZone() {
var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}
// Outputs: +5:00
একটি ওয়ান-লাইনার যা অফসেট এবং টাইম জোন উভয়কেই দেয় একটি নতুন তারিখ অবজেক্টে কেবলমাত্র টাইমস্ট্রিং () এ কল করা । এমডিএন থেকে:
toTimeString()
পদ্ধতি সময় আমেরিকান ইংরেজি মানব পাঠযোগ্য আকারে একটি তারিখ বস্তুর অংশ ফেরৎ।
ধরাটি হ'ল টাইমজোনটি স্ট্যান্ডার্ড আইএএনএ ফর্ম্যাটে নেই; এটি "মহাদেশ / শহর" আইএএনএ ফর্ম্যাটের চেয়ে কিছুটা বেশি ব্যবহারকারী-বান্ধব । চেষ্টা কর:
console.log(new Date().toTimeString().slice(9));
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
console.log(new Date().getTimezoneOffset() / -60);
ক্যালিফোর্নিয়ায় এখনই, ইন্টেল এপিআই ফিরে toTimeString()
আসার Pacific Daylight Time
সময় ফিরে আসে America/Los_Angeles
। কলম্বিয়াতে আপনি পেয়ে যাবেন Colombia Standard Time
, বনাম America/Bogota
।
মনে রাখবেন যে এই প্রশ্নের আরও অনেক উত্তর ডেট.টোস্ট্রিং () এ কল করে একই তথ্য পাওয়ার চেষ্টা করে। এই পদ্ধতিটি নির্ভরযোগ্য নয়, যেমন এমডিএন ব্যাখ্যা করে :
তারিখের দৃষ্টান্তগুলি নির্দিষ্ট সময়ে নির্দিষ্ট বিন্দুকে উল্লেখ করে। স্ট্রিং () তে কল করা আমেরিকান ইংরাজীতে মানব পাঠযোগ্য আকারে ফর্ম্যাট করা তারিখটি ফিরিয়ে দেবে। [...] কখনও কখনও সময়ের অংশের একটি স্ট্রিং পাওয়া বাঞ্ছনীয়; যেমন একটি জিনিস
toTimeString()
পদ্ধতি দ্বারা সম্পন্ন করা যেতে পারে ।
toTimeString()
কারণ অনুবর্তী ECMA-262 বাস্তবায়ন ইঞ্জিন স্ট্রিং থেকে প্রাপ্ত ভিন্ন হতে পারে পদ্ধতি বিশেষভাবে কার্যকরtoString()
জন্যDate
, বস্তু হিসাবে ফর্ম্যাট বাস্তবায়ন নির্ভর হয়; সরল স্ট্রিং স্লাইসিং এপ্রোচগুলি একাধিক ইঞ্জিনের মধ্যে সামঞ্জস্যপূর্ণ ফলাফল তৈরি করতে পারে না।
javascript:
var d = new Date();
var n = d.getTimezoneOffset();
var timezone = n / -60;
console.log(timezone);
সঙ্গে moment.js :
moment().format('zz');
Z
এবংZZ
সঙ্গে momentjs, আপনি বর্তমান টাইমজোন হিসাবে সন্ধান করতে পারেন
console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
সঙ্গে dayjs, আপনি বর্তমান টাইমজোন হিসাবে সন্ধান করতে পারেন
console.log(dayjs().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.)
<script src="https://unpkg.com/dayjs@1.8.10/dayjs.min.js"></script>
উভয় এপিআই মিনিটের মধ্যেই অফসেট অফসেস দেয়।
getTimezoneOffset()
।
ঘন্টা সময় টাইমজোন-
var offset = new Date().getTimezoneOffset();
if(offset<0)
console.log( "Your timezone is- GMT+" + (offset/-60));
else
console.log( "Your timezone is- GMT-" + offset/60);
আপনি মন্তব্য হিসাবে উল্লিখিত হিসাবে আপনি যদি সুনির্দিষ্ট হতে চান, তবে আপনার এইরকম চেষ্টা করা উচিত-
var offset = new Date().getTimezoneOffset();
if(offset<0)
{
var extraZero = "";
if(-offset%60<10)
extraZero="0";
console.log( "Your timezone is- GMT+" + Math.ceil(offset/-60)+":"+extraZero+(-offset%60));
}
else
{
var extraZero = "";
if(offset%60<10)
extraZero="0";
console.log( "Your timezone is- GMT-" + Math.floor(offset/60)+":"+extraZero+(offset%60));
}
আপনার কেবলমাত্র যদি প্রয়োজন হয় "এমএসটি" বা "ইএসটি" সময় অঞ্চল সংক্ষেপণ:
function getTimeZone(){
var now = new Date().toString();
var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts the content between parenthesis
return timeZone;
}
Date.toString()
করা নির্ভরযোগ্য নয় এবং MDN কেন তা ব্যাখ্যা করে। আমি আমার ডাকে তাদের ডক্স থেকে প্রাসঙ্গিক বিভাগটি আটকিয়েছি ।
এই ফলাফলটি অপারেটরটি টাইমজোনের বিপরীতে দেখুন। তাই কিছু গণিতের ফাংশন প্রয়োগ করুন তারপরে সংখ্যাটি কম বা বেশি বৈধ করুন।
var a = new Date().getTimezoneOffset();
var res = -Math.round(a/60)+':'+-(a%60);
res = res < 0 ?res : '+'+res;
console.log(res)
round
? এটা হওয়া উচিত floor
, তাই না?
function getLocalTimeZone() {
var dd = new Date();
var ddStr = dd.toString();
var ddArr = ddStr.split(' ');
var tmznSTr = ddArr[5];
tmznSTr = tmznSTr.substring(3, tmznSTr.length);
return tmznSTr;
}
উদাহরণ: থু জুন 21 2018 18:12:50 GMT + 0530 (ভারত স্ট্যান্ডার্ড সময়)
ও / পি: +0530
Date.toString()
করা নির্ভরযোগ্য নয় এবং MDN কেন তা ব্যাখ্যা করে। আমি আমার ডাকে তাদের ডক্স থেকে প্রাসঙ্গিক বিভাগটি আটকিয়েছি ।
এটা চেষ্টা কর,
new Date().toString().split("GMT")[1].split(" (")[0]
এই মানটি ব্যবহারকারীর মেশিন থেকে এবং এটি যে কোনও সময় পরিবর্তিত হতে পারে তাই আমি মনে করি এটির কোনও গুরুত্ব নেই, আমি কেবল একটি আনুমানিক মান পেতে চাই এবং তারপরে এটি আমার সার্ভারে GMT এ রূপান্তর করতে চাই।
উদাহরণস্বরূপ, আমি তাইওয়ান থেকে এসেছি এবং এটি আমার জন্য "+8" ফিরিয়ে দেয়।
জাতীয়
function timezone() {
var offset = new Date().getTimezoneOffset();
var minutes = Math.abs(offset);
var hours = Math.floor(minutes / 60);
var prefix = offset < 0 ? "+" : "-";
return prefix+hours;
}
$('#result').html(timezone());
এইচটিএমএল
<div id="result"></div>
ফলাফল
+8
এতে new Date(
) আপনি যে টাইমজোন নামটি করতে পারেন তা পেতে অফসেটটি পেতে পারেন:
new Date().toString().replace(/(.*\((.*)\).*)/, '$2');
আপনি ()
তারিখের শেষে মান পেতে পারেন , এটি টাইমজোনটির নাম।
Date.toString()
করা নির্ভরযোগ্য নয় এবং MDN কেন তা ব্যাখ্যা করে। আমি আমার ডাকে তাদের ডক্স থেকে প্রাসঙ্গিক বিভাগটি আটকিয়েছি । এছাড়াও, ইতিমধ্যে কমপক্ষে 3 বার এই উত্তর দেওয়া হয়েছে।
এটি আমার সমাধান হবে:
// For time zone:
const timeZone = /\((.*)\)/.exec(new Date().toString())[1];
// Offset hours:
const offsetHours = new Date().getTimezoneOffset() / 60;
console.log(`${timeZone}, ${offsetHours}hrs`);
বিকল্প হিসাবে new Date().getTimezoneOffset()
এবংmoment().format('zz')
আপনি ব্যবহার করতে পারেনmomentjs:
var offset = moment.parseZone(Date.now()).utcOffset() / 60
console.log(offset);
<script src="https://cdn.jsdelivr.net/momentjs/2.13.0/moment.min.js"></script>
jstimezone এছাড়াও বেশ বগী এবং unmaintained আছে ( https://bitbucket.org/pellepim/jstimezonedetect/issues?status=new&status=open )
অফসেটটিকে পোস্টে রূপান্তর করতে এটি ব্যবহার করুন:
var offset = new Date().getTimezoneOffset();
console.log(offset);
this.timeOffSet = offset + (-2*offset);
console.log(this.timeOffSet);
আমি কেবলমাত্র 3 টি অক্ষরের স্ট্রিং ("পিডিটি" এর মতো) খুঁজছিলাম এবং মার্কেজের উত্তরটি চেষ্টা করেছিলাম তবে ক্রস ব্রাউজারের সমর্থনের জন্য এটি কিছুটা টুইট করতে হয়েছিল। ভাগ্যক্রমে, স্ট্রিংটি শেষ সম্ভাব্য ম্যাচ :)
কফিস্ক্রিপ্টে আমি যা করেছি তা এখানে:
browserTimezone = ->
userDate = new Date()
zoneMatches = userDate.toString().match(/([A-Z][A-Z][A-Z])/g)
userZone = zoneMatches[zoneMatches.length - 1]
আইই 8, আই 9, সাফারি 9, ফায়ারফক্স 44, এবং ক্রোম 48 এ কাজ করে
Date.toString()
করা নির্ভরযোগ্য নয় এবং MDN কেন তা ব্যাখ্যা করে। আমি আমার ডাকে তাদের ডক্স থেকে প্রাসঙ্গিক বিভাগটি আটকিয়েছি ।
আপনি কেবল moment.js এবং jstz.js অন্তর্ভুক্ত করতে পারেন
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstimezonedetect/1.0.6/jstz.min.js"></script>
এবং তারপর
<script>
$(function(){
var currentTimezone = jstz.determine();
var timezone = currentTimezone.name();
alert(timezone);
});
</script>
এটি আমার পক্ষে খুব ভাল কাজ:
// Translation to offset in Unix Timestamp
let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600;
আপনি কেবল এটি চেষ্টা করতে পারেন। এটি আপনাকে বর্তমান মেশিনের সময় ফিরিয়ে দেবে
var _d = new Date(), t = 0, d = new Date(t*1000 + _d.getTime())
new Date(new Date().getTime());
এটি প্রদর্শিত হবে: "শুক্র ডিসেম্বর 28 2018 10:15:23 GMT + 0100 (মধ্য ইউরোপীয় মানক সময়)}}"