কোনও ব্যবহারকারীর টাইমজোন নির্ধারণ করুন


610

ওয়েব পৃষ্ঠার মধ্যে কোনও ব্যবহারকারীর টাইমজোন নির্ধারণের জন্য কোনও ওয়েব সার্ভারের কি কোনও মানক উপায় আছে?

সম্ভবত কোনও এইচটিটিপি শিরোনাম বা user-agentস্ট্রিংয়ের কিছু অংশ থেকে ?


6
ব্যবহারকারীকে জিজ্ঞাসা করুন। যদি আপনি ব্যবহারকারীর কম্পিউটার থেকে সময় অঞ্চল পান, এবং এটি ভুল সেট হয়ে যায়, তবে কী?
রব উইলিয়ামস 0

40
তাহলে ব্যবহারকারী সম্ভবত যত্ন করে না?
অগ্নোস্টার


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

1
ব্যবহারকারী টাইমজোনটি কেন আপনার জানা দরকার?
ব্রায়াম

উত্তর:


326
-new Date().getTimezoneOffset()/60;

পদ্ধতিটি getTimezoneOffset()GMT থেকে আপনার সময়কে বিয়োগ করবে এবং মিনিটের সংখ্যাটি ফিরিয়ে দেবে। সুতরাং আপনি যদি GMT-8 এ থাকেন তবে এটি 480 ফেরত আসবে।

এটিকে কয়েক ঘণ্টার মধ্যে রাখার জন্য, 60 টি দিয়ে বিভক্ত করুন Also এছাড়াও লক্ষ করুন যে সাইনটি আপনার যা প্রয়োজন তার বিপরীত - এটি GMT এর অফসেটটি আপনার টাইম অঞ্চল থেকে গণনা করছে, GMT থেকে আপনার টাইম জোনের অফসেট নয়। এটি ঠিক করতে, কেবল -1 দিয়ে গুণ করুন।

এছাড়াও নোট করুন যে ডাব্লু 3 স্কুল বলে:

ডেটলাইট সেভিং টাইম ব্যবহারের অনুশীলনের কারণে প্রত্যাবর্তিত মানটি একটি ধ্রুবক নয়।


5
জাভাস্ক্রিপ্ট সমর্থন ছাড়াই ব্রাউজার রয়েছে এমন সেল ফোন ব্যবহার করেন এমন ব্যবহারকারীদের সম্পর্কে কী বলা যায়? আমি প্রশ্নটি পছন্দ করি, ব্যবহারকারী এইচটিটিপি শিরোনাম, ব্যবহারকারী এজেন্ট সম্পর্কে জিজ্ঞাসা করে ... এই কাজের সার্ভারটি যতটা সম্ভব যথাযথভাবে তৈরি করার কোনও উপায় আছে?
নিশচল

18
এটি সর্বদা ডিএসটি-র জন্য কাজ করে না। টাইমজোন অফসেট পান যা যা বলে ঠিক তাই করে। এটি অফসেট। একটি সময় অঞ্চল আসলে একটি ভৌগলিক অঞ্চল। এটি দিবালোকের সঞ্চয়ের জন্য কাজ করবে না যেহেতু আপনি জানেন না যে কোন গোলার্ধে ব্যবহারকারী থাকেন বা তাদের দেশে এমনকি দিবালোকের সঞ্চয় রয়েছে has পরিবর্তে এটি কেন ব্যবহার করবেন না:>>> date.toTimeString() "15:46:04 GMT+1200 (New Zealand Standard Time)"
কিও

20
আমি কিওর সাথে আলাদা হতে অনুরোধ করছি। GetTimezoneOffset () এর ECMA- স্ট্যান্ডার্ড ecma-international.org/ecma-262/5.1/#sec-15.9.5.26 এর সংজ্ঞা অনুযায়ী "স্থানীয় সময় এবং ইউটিসি সময়ের মধ্যে কয়েক মিনিটের মধ্যে পার্থক্য ফিরে আসে।" - অন্য কথায়, এটি দিবালোকের সঞ্চয়গুলি অ্যাকাউন্টে নেওয়া উচিত। মজিলার ডকুমেন্টেশন বলছে "দিবালোক সংরক্ষণের সময় এই মানটিকে প্রদত্ত লোকেলের জন্যও ধ্রুবক হতে বাধা দেয়।"
xgretsch

11
@ এক্সগ্র্রেটস: এটি জিএমটি থেকে ব্যবহারকারীর বর্তমান অফসেট পেয়েছে। যদি আপনি একই দিনে ঘটে যাওয়া অন্য সময়টি উপস্থাপন করেন তবে (বর্তমান তারিখটি পরিবর্তনের তারিখ না থাকলে, যেখানে এটি ভুল হতে পারে) ঠিক আছে। তবে, অনেক টাইমজোন রয়েছে যা GMT থেকে একই অফসেটে রয়েছে এবং তাদের বিভিন্ন পরিবর্তনের তারিখ থাকতে পারে বা দিবালোক সঞ্চয় ব্যবহার না করে।
মাইক ডিমমিক

12
এখানে একটি বিষয় লক্ষণীয়; কিছু জায়গার (যেমন কানাডার নিউফাউন্ডল্যান্ড) এমন সময় অঞ্চল রয়েছে যা আধ ঘণ্টার মধ্যে বন্ধ থাকে, সুতরাং by০ ভাগ করার পরে আপনার উত্তরটি পূর্ণসংখ্যার নাও হতে পারে।
জেসন ওয়ালটন

193

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

আমি স্মার্ট আলেক হওয়ার চেষ্টা করছি না এটি ঠিক যে কখনও কখনও কিছু সমস্যার কোনও প্রোগ্রামিং প্রসঙ্গে বাইরে সূক্ষ্ম সমাধান রয়েছে।


5
কোনও ব্যবহারকারী যখন .ics ফাইল ডাউনলোড করছেন তখন তাদের অবস্থানের সাথে নির্দিষ্ট সময়ের শুরু হওয়া উচিত (উদাহরণস্বরূপ, সারা দেশে 9-10am)? তাদের সময় অঞ্চলটি ইমো কী তা বলার দরকার নেই।
মারসি সুতন

33
@ ইসমাmaল: তবে ব্যবহারকারীরা আন্তর্জাতিকভাবে ভ্রমণ করেন এবং প্রতিবার কোনও অ-নেটিভ টাইমজোন থেকে লগইন করার সময় তাদের সময় অঞ্চলটি বলার দরকার নেই
রজত গুপ্ত

10
এটি প্রশ্নের উত্তর দেয় না, যা স্পষ্টভাবে বোঝায় যে তিনি প্রযুক্তিগত সমাধান খুঁজছেন।
জি-উইজ

5
@gWiz ওপি একটি স্ট্যান্ডার্ড সমাধান চাইছে। এটি বেশ মান।
সাইমন বার্গোট

4
সম্ভবত ব্যবহারকারীকে জিজ্ঞাসা করার সর্বোত্তম সমাধানটি হ'ল (উদাহরণস্বরূপ একটি প্রতিবেদনের শীর্ষে একটি সময়-অঞ্চল নিচে নামিয়ে দেওয়া), যখন কোনও মোবাইল কোনও ব্যবহারকারী যখন জিপিএস-নির্ধারিত সময়-অঞ্চলে ড্রপ ডাউন নির্বাচনকে ডিফল্ট করে? ডিভাইস যা অবস্থানের তথ্য সরবরাহ করে এবং অন্যথায় ইউটিসি-তে ডিফল্ট।
ট্রায়ঙ্কো

131

এমন কোনও HTTP শিরোনাম নেই যা এ পর্যন্ত এইচটিটিপি নির্দিষ্টকরণের মধ্যে অন্তর্ভুক্ত করার পরামর্শ দেওয়া হলেও ক্লায়েন্টদের টাইমজোনটির প্রতিবেদন করবে।

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


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

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

প্রিক্সিগুলি ব্যবহার করার সময় মিকো রেন্টালাইন সাবধান, কারণ তারা সর্বদা নিজেরাই শিরোনামে বিজ্ঞাপন দেয় না।
ম্যাথিউইউ

: @Matthieu একটি ভালো উত্তর আজকাল বিদ্যমান stackoverflow.com/a/11836123/334451
Mikko Rantalainen

2
এটি আক্ষরিকভাবেই একমাত্র উত্তর যা আসলে উত্থাপিত প্রশ্নের সমাধান করেছিল addressed
lscoughlin

54

জাভাস্ক্রিপ্ট ক্লায়েন্টের স্থানীয় সময় পাওয়ার সহজতম উপায়। স্থানীয় সময়টি ফেরত পাঠানোর জন্য আমি এক্সএমএলএইচটিপিআরকোয়েস্ট ব্যবহার করার পরামর্শ দেব এবং যদি এটি ব্যর্থ হয় তবে তাদের আইপি ঠিকানার ভিত্তিতে সনাক্ত করা টাইমজোনটিতে ফিরে যান।

ভূ-অবস্থান হিসাবে আমি বেশ কয়েকটি প্রকল্পে ম্যাক্সমাইন্ড জিওআইপি ব্যবহার করেছি এবং এটি ভাল কাজ করে, যদিও তারা টাইমজোন ডেটা সরবরাহ করে কিনা তা আমি নিশ্চিত নই। এটি আপনার দেওয়া অর্থ এবং এটি আপনার ডাটাবেসে মাসিক আপডেট সরবরাহ করে updates তারা বেশ কয়েকটি ওয়েব ভাষায় মোড়ক সরবরাহ করে।


আমি এই উত্তরটি ভোট দিয়েছি কারণ জিওআইপি (যেমনটি এখন পর্যন্ত একটি মুক্ত সংস্করণ রয়েছে) এর মতো ডাটাবেসগুলি থেকে প্রাপ্ত অক্ষাংশ এবং দ্রাঘিমাংশকে এমন ডেটাবেসগুলির সাথে একত্রিত করা যেতে পারে যা এই জাতীয় স্থিতিকে একটি সময় অঞ্চলে রূপান্তর করে। আমি মনে করি জিওনামের এই জাতীয় ডেটাবেস রয়েছে।
পিটার ও।

ম্যাক্সমাইন্ড জিওআইপি ডাটাবেস / এপিআই-এর বর্তমান সংস্করণগুলি (বিনামূল্যে এবং অর্থ-প্রদানযোগ্য), টাইমজোন সম্পর্কিত তথ্য সরবরাহ করে (এটি আমার টাইমজোনটির জন্য "ইউরোপ / লন্ডন" ফিরিয়ে দেয়)) তাদের জিওআইপি সিস্টেমের পুরানো সংস্করণটি আমি মনে করতে পারি না একই কাজ, কিন্তু এটি এখন খুব ভাল কাজ করে! ম্যাক্সমাইন্ড ক্ষেত্রগুলির নাম দেওয়া হয়েছে "সময়_ অঞ্চল", "সময়_ অঞ্চল_নাম"।
ম্যাথু স্লিম্যান 21

51

প্রথমত, জাভাস্ক্রিপ্টে টাইম অঞ্চল সনাক্তকরণ অসম্পূর্ণ তা বুঝতে understand আপনি কোনও নির্দিষ্ট তারিখ এবং সময়ের জন্য অবজেক্টের উদাহরণ ব্যবহার করে স্থানীয় সময় অঞ্চলটি অফসেট পেতে পারেন , তবে এটি পুরো আইএএনএ টাইম জোনের মতো নয় ।getTimezoneOffsetDateAmerica/Los_Angeles

কিছু বিকল্প আছে যা কাজ করতে পারে যদিও:

const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;
console.log(tzid);

ফলাফলটি এমন একটি স্ট্রিং যা কোডটি চলছে যেখানে কম্পিউটারের আইএএনএ টাইম জোন সেটিং রয়েছে।

সমর্থিত পরিবেশগুলি ইনটেল সামঞ্জস্যতা সারণীতে তালিকাভুক্ত করা হয়DateTimeFormatবিভাগটি প্রসারিত করুন , এবং নামের বৈশিষ্ট্যটি দেখুন resolvedOptions().timeZone defaults to the host environment

  • কিছু লাইব্রেরি, যেমন লাক্সন যেমন এফআইপি ব্যবহার করে সময় অঞ্চল নির্ধারণ করতে এই এপিআই ব্যবহার করে luxon.Settings.defaultZoneName

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

    JsTimezoneDetect এবং moment-timezone উভয়ের এই কার্যকারিতা রয়েছে।

    // using jsTimeZoneDetect
    var tzid = jstz.determine().name();
    
    // using moment-timezone
    var tzid = moment.tz.guess();

    উভয় ক্ষেত্রেই ফলাফলটি কেবল অনুমান হিসাবেই ভাবা যায়। অনুমানটি অনেক ক্ষেত্রে সঠিক হতে পারে তবে তাদের সবকটিই নয়।

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

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

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


সময় অঞ্চল নির্ধারণের জন্য ব্যবহারকারীর ভৌগলিক অবস্থান (অর্থাত্ তাদের স্থানীয়) ব্যবহার করাও ত্রুটিযুক্ত। ব্যবহারকারীরা তাদের ডিভাইসে একটি নির্দিষ্ট টাইমজোন ব্যবহার করতে চাইতে পারেন যা স্থানীয় সময় অঞ্চল নয়, এমনকি তারা ভেবেছিল যে এটি একই সময় প্রদর্শিত হতে পারে (বা না)। যেমন ভ্রমণকারীরা ঘন ঘন তাদের ডিভাইসগুলি তাদের স্থানীয় লোকেশনে নির্ধারিত সময় অঞ্চল দিয়ে রেখে দেয় এবং তারিখ এবং সময়গুলি কোনও পরামর্শ না দিয়ে আলাদা অফসেট ব্যবহার করার আশা করে না। আমি এখানে ব্যক্তিগত অভিজ্ঞতা থেকে কথা বলছি… ;-)
রবজি

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

একটি পরিভাষা নোট জোগাড়: "লোকেল" প্রবলভাবে হয় না ব্যবহারকারীর ভৌগলিক অবস্থান। "লোকেল" ভাষা, সংখ্যার বিন্যাস, ক্যালেন্ডার ইত্যাদির মতো একটি গোষ্ঠী example উদাহরণস্বরূপ, ডি_ডিই লোকেল জার্মানকে ডিফল্ট ভাষা হিসাবে নির্দিষ্ট করে, ইউরোটিকে ডিফল্ট মুদ্রা হিসাবে, কমাগুলি দশমিক বিভাজক হিসাবে, হাজার হাজার বিভাজকের হিসাবে পিরিয়ড এবং গ্রেগরিয়ান ক্যালেন্ডার হিসাবে বিকাশকারী.মোজিলা.অর্গ.ইন-
ইউএস

49

ব্রাউজারটি যে টাইম জোনে রয়েছে তা নির্ধারণের জন্য এখানে একটি শক্তিশালী জাভাস্ক্রিপ্ট সমাধান রয়েছে।

>>> var timezone = jstz.determine();
>>> timezone.name(); 
"Europe/London"

https://bitbucket.org/pellepim/jstimezonedetect

পরিশিষ্ট 1: এখন এই প্রকল্পটি গিটহাব: https://github.com/pellepim/jsimezonedetect এ অবস্থিত


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

1
এই! এই পথেই যেতে হবে। সাধারণ লাইব্রেরি, ডিএসটি সঠিকভাবে পরিচালনা করে। অন্যান্য উত্তরগুলি ডাব্লুটিএফ-এ পূর্ণ এবং অনেকগুলি ডিএসটি করে না।
দিরবাইও

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

3
এই গ্রন্থাগারের আর প্রয়োজন নেই। আধুনিক ব্রাউজারগুলি ইন্টেল এপিআই সমর্থন করে, যা আইএএনএ টাইমজোন স্ট্রিং প্রদান করে। এই উত্তর দেখুন ।
ড্যান ড্যাসক্লেস্কু

42

এখানে আরও একটি সম্পূর্ণ উপায়।

  1. ব্যবহারকারীর জন্য টাইমজোন অফসেট পান
  2. দিবালোক সংরক্ষণের সীমানায় কিছু দিন পরীক্ষা করুন যে সেগুলি এমন কোনও অঞ্চলে রয়েছে যা দিবালোক সংরক্ষণ ব্যবহার করে।

একটি উদ্ধৃতি নীচে:

function TimezoneDetect(){
    var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
    var intOffset = 10000; //set initial offset high so it is adjusted on the first attempt
    var intMonth;
    var intHoursUtc;
    var intHours;
    var intDaysMultiplyBy;

    // Go through each month to find the lowest offset to account for DST
    for (intMonth=0;intMonth < 12;intMonth++){
        //go to the next month
        dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);

        // To ignore daylight saving time look for the lowest offset.
        // Since, during DST, the clock moves forward, it'll be a bigger number.
        if (intOffset > (dtDate.getTimezoneOffset() * (-1))){
            intOffset = (dtDate.getTimezoneOffset() * (-1));
        }
    }

    return intOffset;
}

জেএস থেকে টিজেড এবং ডিএসটি পাওয়া (ওয়ে ব্যাক মেশিনের মাধ্যমে)


এটি আমার পক্ষে কাজ করেছিল! কোডটিতে কয়েকটি আপডেটের জন্য ব্লগ পোস্টের নীচে মন্তব্যগুলি পড়ুন।
আরলোমেডিয়া

এখনও শুধুমাত্র ফিরে আসবে মান অফসেট যেমন +02 সময় জোন,: 00। এটা আপনি নির্ধারণ করতে যথেষ্ট তথ্য দিতে হবে না সময় অঞ্চল যেমন ব্যবহারকারী, এর Africa/Johannesburgবা Europe/Istanbul। দেখুন টাইমজোন ট্যাগ উইকি
ম্যাট জনসন-পিন্ট

32

Unkwntech এর পদ্ধতির ব্যবহার করে, আমি jQuery এবং পিএইচপি ব্যবহার করে একটি ফাংশন লিখেছি। এটি পরীক্ষা করা হয় এবং কাজ করে!

পিএইচপি পৃষ্ঠাতে যেখানে আপনি ভেরিয়েবল হিসাবে টাইমজোন রাখতে চান সেখানে পৃষ্ঠার শীর্ষের কাছাকাছি কোথাও কোডের এই স্নিপেট রাখুন:

<?php
    session_start();
    $timezone = $_SESSION['time'];
?>

এটি সেশন ভেরিয়েবল "সময়" পড়বে, যা আমরা এখন তৈরি করতে চলেছি।

একই পৃষ্ঠায়, <শিরোনাম> এ, আপনাকে প্রথমে jQuery অন্তর্ভুক্ত করতে হবে:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>

JQuery এর নীচে <হেড> এও এটি পেস্ট করুন:

<script type="text/javascript">
    $(document).ready(function() {
        if("<?php echo $timezone; ?>".length==0){
            var visitortime = new Date();
            var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60;
            $.ajax({
                type: "GET",
                url: "http://example.org/timezone.php",
                data: 'time='+ visitortimezone,
                success: function(){
                    location.reload();
                }
            });
        }
    });
</script>

আপনি হয়ত লক্ষ্য করেছেন বা নাও পেয়েছেন, তবে আপনার URL টি আপনার আসল ডোমেনে পরিবর্তন করতে হবে।

ত্য জ্যজ্জকিজ. আপনি সম্ভবত ভাবছেন যে হেক টাইমজোন.এফপি কি। ঠিক আছে, এটি কেবল এটি: ( টাইমজোন.পিপি নামে একটি নতুন ফাইল তৈরি করুন এবং উপরের ইউআরএল দ্বারা এটি নির্দেশ করুন)

<?php
    session_start();
    $_SESSION['time'] = $_GET['time'];
?>

যদি এটি সঠিকভাবে কাজ করে তবে এটি প্রথমে পৃষ্ঠাটি লোড করবে, জাভাস্ক্রিপ্ট কার্যকর করবে এবং পৃষ্ঠাটি পুনরায় লোড করবে। তারপরে আপনি $ টাইমজোন ভেরিয়েবলটি পড়তে সক্ষম হবেন এবং এটি আপনার সন্তুষ্টির জন্য ব্যবহার করতে পারবেন! এটি বর্তমান ইউটিসি / জিএমটি টাইম জোন অফসেট (জিএমটি -7) বা আপনি যে টাইমজোনটিতে রয়েছেন তা ফেরৎ দেয়।


আমি এটি পছন্দ করি তবে আমার কাছে এমন কিছু থাকতে পারে যা বর্তমানের $ _SESSION ['সময়'] পরীক্ষা করে এবং জাভাস্ক্রিপ্টটি অন্যরকম হলে পুনরায় লোড করতে পাবে
ক্রিস্টোফার চেজ

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

25

JQuery এর সাথে AJAX অনুরোধে HTTP শিরোনাম হিসাবে অফসেটটি টাইমজোনটি জমা দিতে

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-TZ-Offset", -new Date().getTimezoneOffset()/60);
    }
});

আপনি http://momentjs.com/imezone/docs/#/used-timezones/guessing-user-timezone/moment.tz.guess(); থেকে ব্যবহার করে প্রকৃত সময় অঞ্চল নাম পেতে অনুরূপ কিছু করতে পারেন


1
এটি কেবল বর্তমান সময় অঞ্চলটি অফসেটটি দেয় - সময় অঞ্চল নয় । দেখুন টাইমজোন ট্যাগ উইকি
ম্যাট জনসন-পিন্ট

সময় অঞ্চল নামের জন্য একই কাজ সম্পর্কে তথ্য অন্তর্ভুক্ত সম্পাদিত।
ফিলিফ্রেও

24

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

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

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

এখন, জাভাস্ক্রিপ্ট সহ সময় অঞ্চল পেতে আপনি এটি ব্যবহার করতে পারেন:

>> new Date().toTimeString();
"15:46:04 GMT+1200 (New Zealand Standard Time)"
//Use some regular expression to extract the time.

তবে আমি সহজেই এই শক্তসমর্থ প্লাগইনটি ব্যবহার করা সহজ বলে মনে করেছি যা ওলসেন ফর্ম্যাট টাইমজোনটি দেয়:

https://github.com/scottwater/jquery.detect_timezone


22

পিএইচপি সহ date ফাংশন সহ আপনি সার্ভারের তারিখের সময়টি পাবেন যার উপর সাইটটি রয়েছে। ব্যবহারকারীর সময় পাওয়ার একমাত্র উপায় জাভাস্ক্রিপ্ট ব্যবহার করা।

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

আপনি পিএইচপি ফাংশন ব্যবহার করে কোনও নির্দিষ্ট সময় অঞ্চল নির্ধারণ করতে পারেন date_default_timezone_set। এটি ব্যবহারকারীদের জন্য নির্দিষ্ট সময় অঞ্চল নির্ধারণ করে।

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

পিএইচপি এবং জাভাস্ক্রিপ্ট ব্যবহার করে ব্যবহারকারীদের সময় অঞ্চল পেতে স্ক্রিপ্টের নীচে।

<?php
    #http://www.php.net/manual/en/timezones.php List of Time Zones
    function showclienttime()
    {
        if(!isset($_COOKIE['GMT_bias']))
        {
?>

            <script type="text/javascript">
                var Cookies = {};
                Cookies.create = function (name, value, days) {
                    if (days) {
                        var date = new Date();
                        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                        var expires = "; expires=" + date.toGMTString();
                    }
                    else {
                        var expires = "";
                    }
                    document.cookie = name + "=" + value + expires + "; path=/";
                    this[name] = value;
                }

                var now = new Date();
                Cookies.create("GMT_bias",now.getTimezoneOffset(),1);
                window.location = "<?php echo $_SERVER['PHP_SELF'];?>";
            </script>

            <?php

        }
        else {
          $fct_clientbias = $_COOKIE['GMT_bias'];
        }

        $fct_servertimedata = gettimeofday();
        $fct_servertime = $fct_servertimedata['sec'];
        $fct_serverbias = $fct_servertimedata['minuteswest'];
        $fct_totalbias = $fct_serverbias  $fct_clientbias;
        $fct_totalbias = $fct_totalbias * 60;
        $fct_clienttimestamp = $fct_servertime + $fct_totalbias;
        $fct_time = time();
        $fct_year = strftime("%Y", $fct_clienttimestamp);
        $fct_month = strftime("%B", $fct_clienttimestamp);
        $fct_day = strftime("%d", $fct_clienttimestamp);
        $fct_hour = strftime("%I", $fct_clienttimestamp);
        $fct_minute = strftime("%M", $fct_clienttimestamp);
        $fct_second = strftime("%S", $fct_clienttimestamp);
        $fct_am_pm = strftime("%p", $fct_clienttimestamp);
        echo $fct_day.", ".$fct_month." ".$fct_year." ( ".$fct_hour.":".$fct_minute.":".$fct_second." ".$fct_am_pm." )";
    }

    showclienttime();
?>

তবে আমার দৃষ্টিকোণ অনুসারে, আপনার প্রকল্পে নিবন্ধন বাধ্যতামূলক কিনা তা ব্যবহারকারীদের কাছে জিজ্ঞাসা করা ভাল।


22

অবস্থান নির্ধারণের জন্য আইপি ঠিকানাটি ব্যবহার করবেন না (এবং তাই সময় অঞ্চল) - এটি NAT, প্রক্সিগুলি (ক্রমবর্ধমান জনপ্রিয়) এবং ভিপিএন সহ আইপি অ্যাড্রেসগুলি ব্যবহারকারীর আসল অবস্থানটি অবশ্যই বাস্তবতার সাথে প্রতিফলিত করে না তবে সেই অবস্থানটিতে সার্ভারগুলি prot প্রোটোকলগুলি প্রয়োগ করে।

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

উপরে প্রদর্শিত আইপি ঠিকানা এবং অন্যান্য কৌশলগুলি কোনও ডিফল্ট পরামর্শ দেওয়ার জন্য দরকারী যা ব্যবহারকারীর সামঞ্জস্য / সঠিক করতে পারে।


21

javascript:

function maketimus(timestampz)
{
    var linktime = new Date(timestampz * 1000);
    var linkday = linktime.getDate();
    var freakingmonths = new Array();

    freakingmonths[0]  = "jan";
    freakingmonths[1]  = "feb";
    freakingmonths[2]  = "mar";
    freakingmonths[3]  = "apr";
    freakingmonths[4]  = "may";
    freakingmonths[5]  = "jun";
    freakingmonths[6]  = "jul";
    freakingmonths[7]  = "aug";
    freakingmonths[8]  = "sep";
    freakingmonths[9]  = "oct";
    freakingmonths[10] = "nov";
    freakingmonths[11] = "dec";

    var linkmonthnum = linktime.getMonth();
    var linkmonth = freakingmonths[linkmonthnum];
    var linkyear = linktime.getFullYear();
    var linkhour = linktime.getHours();
    var linkminute = linktime.getMinutes();

    if (linkminute < 10)
    {
        linkminute = "0" + linkminute;
    }

    var fomratedtime = linkday + linkmonth + linkyear + " " +
                       linkhour + ":" + linkminute + "h";
    return fomratedtime;
}

এই ফাংশনে আপনার ইউনিক্স টাইমস্ট্যাম্প বিন্যাসে কেবল সময় সরবরাহ করুন; জাভাস্ক্রিপ্ট ইতিমধ্যে ব্যবহারকারীর সময় অঞ্চল জানে।

এটার মত:

পিএইচপি:

echo '<script type="text/javascript">
var eltimio = maketimus('.$unix_timestamp_ofshiz.');
document.write(eltimio);
</script><noscript>pls enable javascript</noscript>';

এটি সর্বদা সময়টি সঠিকভাবে দেখায় যে ব্যক্তি তার / তার কম্পিউটার ঘড়িতে সময় নির্ধারণের সময়টির উপর নির্ভর করে। কাউকে কিছু জিজ্ঞাসা করার এবং জায়গাগুলিতে সংরক্ষণ করার দরকার নেই, godশ্বরকে ধন্যবাদ!


$ ইউনিক্স_টাইমস্ট্যাম্প_ফিশিজ? এখানে কিছু অনুপস্থিত এবং বেশিরভাগ কাজ করে না, যদিও মনে হচ্ছে এটি ভাল উত্তর হতে পারে।

20

সহজ, ঠিক তেমন জাভাস্ক্রিপ্ট getTimezoneOffsetফাংশন ব্যবহার করুন :

-new Date().getTimezoneOffset()/60;

1
এটি একটি জাভাস্ক্রিপ্ট ফাংশন, পিএইচপি ফাংশন নয়।
সিনকোডেনদা

এছাড়াও, এটি কেবলমাত্র বর্তমান সময় অঞ্চলটি অফসেটটি দেয় - সময় অঞ্চল নয় । দেখুন টাইমজোন ট্যাগ উইকি
ম্যাট জনসন-পিন্ট

3
এটি গ্রহণযোগ্য উত্তরের কেবল একটি অনুলিপি, কেন আপনি এমনকি এতে কেন ভোট দিচ্ছেন।
রামবাতিনো

19

যাদু সব মনে হয়

visitortime.getTimezoneOffset()

এটি দুর্দান্ত, আমি সে সম্পর্কে জানতাম না। এটি ইন্টারনেট এক্সপ্লোরার ইত্যাদিতে কাজ করে? সেখান থেকে আপনার জাভাস্ক্রিপ্ট অ্যাজাক্সে ব্যবহার করতে সক্ষম হবে, কুকিজ সেট করুন, যাই হোক না কেন। আমি সম্ভবত নিজেই কুকির পথে যেতে চাই।

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


15

এখানে একটি নিবন্ধ (উত্স কোড সহ) এখানে এএসপি.এনইটি (ভিবি.এনইটি, সি #) অ্যাপ্লিকেশনটিতে কীভাবে স্থানীয় সময় নির্ধারণ এবং ব্যবহার করা যায় তা ব্যাখ্যা করা হয়েছে:

এটা প্রায় সময়

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


1
লিঙ্কটি মারা গেছে। আমি মনে করি এটি বিকল্প লিঙ্ক: devproconnifications.com/article/aspnet2/it-s-about-time-122778
গণ

1
নিবন্ধটি এখানে পিডিএফ ফর্ম হিসাবেও পাওয়া যায়: app.box.com/shared/bfvvmidtyg
Ivaylo

এই নিবন্ধে বর্ণিত ইউটিসি সার্ভারের সময়টিকে স্থানীয় ক্লায়েন্টের সময় রূপান্তর করার পদ্ধতিটি ভুল। সার্ভারে ইউটিসির সময়গুলি সামঞ্জস্য করতে বর্তমান ক্লায়েন্ট অফসেট ব্যবহার করার ফলে অর্ধ বছরের জন্য "ক্লায়েন্ট" স্থানীয় সময়গুলির জন্য ভুল "স্থানীয়" সময়গুলি পাওয়া যাবে যা দিবালোকের সঞ্চয় সময় পর্যবেক্ষণ করে। এই দৃশ্যের বিষয়টি বিবেচনা করুন: যুক্তরাজ্যের একজন ক্লায়েন্ট 14 জানুয়ারী 2013 (GMT + 0000 স্ট্যান্ডার্ড সময়) 21 আগস্ট 2015 14:00 (GMT + 0100 দিবালোক সময়) এর তারিখ এবং সময় নির্ধারণ করে। এটি সার্ভারে 21 আগস্ট 2015 13:00 ইউটিসি-তে স্বাভাবিক হয়ে যায়। যেদিন এটি হয় ক্লায়েন্টের অফসেট 0 হয় তাই ক্লায়েন্টকে ফেরত পাঠানো সময়টি 21 আগস্ট 2015 13:00 হবে।
স্টিফেন ব্লেয়ার

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

14

আপনি যদি প্রমাণীকরণের জন্য ওপেনআইডি ব্যবহার করেন, সরল নিবন্ধকরণ এক্সটেনশন প্রমাণীকৃত ব্যবহারকারীদের জন্য সমস্যাটি সমাধান করবে (আপনাকে টিজেড থেকে সংখ্যায় রূপান্তর করতে হবে)।

আরেকটি বিকল্প হ'ল ব্যবহারকারীর এজেন্টের দেশ পছন্দ থেকে সময় অঞ্চল নির্ধারণ করা। এটি কিছুটা অপরিশোধিত পদ্ধতি (এন-ইউএস-এর জন্য কাজ করবে না) তবে এটি একটি ভাল অনুমান করে।


13

এটি জাভাস্ক্রিপ্ট এবং পিএইচপি সহ সহজ:

যদিও ব্যবহারকারী তার / তার অভ্যন্তরীণ ঘড়ির সাথে এবং / অথবা টাইমজোন নিয়ে গণ্ডগোল করতে পারে, অফসেটটি পাওয়ার জন্য আমি এ পর্যন্ত পাওয়া সবচেয়ে ভাল উপায়, রয়ে গেছে new Date().getTimezoneOffset(); । এটি আক্রমণাত্মক নয়, মাথা ব্যথা দেয় না এবং তৃতীয় পক্ষের উপর নির্ভর করার প্রয়োজনকে দূর করে।

ইউনিক্স টাইমস্ট্যাম্পগুলি সঞ্চয় করার জন্য আমার কাছে একটি টেবিল usersরয়েছে, এটিতে একটি ক্ষেত্র রয়েছে date_created int(13);

একটি ক্লায়েন্ট ধরে নেওয়া যাক creates a new account, ডাটা দ্বারা গৃহীত হয়েছে post, এবং আমি প্রয়োজন ক্লায়েন্টের ইউনিক্স টাইমস্ট্যাম্প না সার্ভারের সঙ্গে।insert/updatedate_created column

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

var off = (-new Date().getTimezoneOffset()/60).toString();//note the '-' in front which makes it return positive for negative offsets and negative for positive offsets
var tzo = off == '0' ? 'GMT' : off.indexOf('-') > -1 ? 'GMT'+off : 'GMT+'+off;

বলুন যে সার্ভারটি গ্রহণ tzoকরে $_POST['tzo'];

$ts = new DateTime('now', new DateTimeZone($_POST['tzo']);
$user_time = $ts->format("F j, Y, g:i a");//will return the users current time in readable format, regardless of whether date_default_timezone() is set or not.
$user_timestamp = strtotime($user_time);

/োকান / আপডেট করুন date_created=$user_timestamp

তারিখ_ক্রেটেড পুনরুদ্ধার করার সময়, আপনি টাইমস্ট্যাম্পকে এভাবে রূপান্তর করতে পারেন:

$date_created = // Get from the database
$created = date("F j, Y, g:i a",$date_created); // Return it to the user or whatever

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

পিএস তবে ব্যবহারকারী যদি ভ্রমণ করে এবং টাইমজোনগুলি পরিবর্তন করে। GMT + 4 এ লগ ইন, GMT-1 এ দ্রুত ভ্রমণ করে এবং আবার লগ ইন করে। শেষ লগইন ভবিষ্যতে হবে।

আমার মনে হয় ... আমরা অনেক বেশি ভাবি।


13

আপনি মুহুর্তের সময় অঞ্চল দিয়ে ক্লায়েন্টে এটি করতে এবং মানটি সার্ভারে প্রেরণ করতে পারেন; নমুনা ব্যবহার:

> moment.tz.guess()
"America/Asuncion"

5
ফাংশনটির নামটি তার যথার্থতা সম্পর্কে সব কিছু বলে; ;)
কিংবদন্তি

আজকাল, moment.js আমি আর সুপারিশ করি না। বর্তমানে অনেক ছোট বিকল্প রয়েছে ( ডেজেস , ডেট-এফএনএস ) মুহুর্তটি বিশাল
ড্যান ড্যাসকলেসকু

11

পিএইচপি-তে একটি বৈধ টিজেড ডাটাবেস টাইমজোন নাম পাওয়া একটি দ্বি-পদক্ষেপ প্রক্রিয়া:

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

    var timezone_offset_minutes = new Date().getTimezoneOffset();
    timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes;

    এই অফসেটটি পিএইচপি-তে পাস করুন।

  2. পিএইচপি-তে এই অফসেটটিকে টাইমজোন_নাম_ফর্ম_এবব্রি ফাংশন সহ একটি বৈধ টাইমজোন নামে রূপান্তর করুন ।

    // Just an example.
    $timezone_offset_minutes = -360;  // $_GET['timezone_offset_minutes']
    
    // Convert minutes to seconds
    $timezone_name = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);
    
    // America/Chicago
    echo $timezone_name;</code></pre>

আমি এটিতে একটি ব্লগ পোস্ট লিখেছি: পিএইচপি- তে ব্যবহারকারী সময় অঞ্চল কীভাবে সনাক্ত করতে হয় । এটিতে একটি ডেমোও রয়েছে।


1
আমি মনে করি একটি সহজ প্রক্রিয়া হ'ল Intl.DateTimeFormat().resolvedOptions().timeZoneএটি ওয়েব সার্ভারে কল করে প্রেরণ করা। রেফ: স্ট্যাকওভারফ্লো.com
মাইকেল স্যাং

9

এটি করার একটি সহজ উপায় হ'ল:

new Date().getTimezoneOffset();

8
2 বছর আগে থেকে আপনি কেন একটি অভিন্ন উত্তরটি (জন আইজ্যাকস দ্বারা পোস্ট করেছেন): স্ট্যাকওভারফ্লো . com / a / 1809974 / 836407 ?
chown

2
এছাড়াও, এটি কেবলমাত্র বর্তমান সময় অঞ্চলটি অফসেটটি দেয় - সময় অঞ্চল নয় । দেখুন টাইমজোন ট্যাগ উইকি
ম্যাট জনসন-পিন্ট

8

একটি সম্ভাব্য বিকল্প Dateহ্যাডার ক্ষেত্রটি ব্যবহার করা হয় যা আরএফসি 7231 এ সংজ্ঞায়িত হয় এবং সময় অঞ্চলটি অন্তর্ভুক্ত করার কথা। অবশ্যই, এটির নিশ্চয়তা নেই যে মানটি সত্যই ক্লায়েন্টের টাইমজোন, তবে এটি একটি সুবিধাজনক সূচনা পয়েন্ট হতে পারে।


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

8

আমি এখানে এটি কিভাবে। এটি ব্যবহারকারীর স্থানীয় সময় অঞ্চলে পিএইচপি ডিফল্ট সময় অঞ্চল সেট করবে will আপনার সমস্ত পৃষ্ঠাগুলির শীর্ষে কেবল নিম্নলিখিতটি পেস্ট করুন:

<?php
session_start();

if(!isset($_SESSION['timezone']))
{
    if(!isset($_REQUEST['offset']))
    {
    ?>
        <script>
        var d = new Date()
        var offset= -d.getTimezoneOffset()/60;
        location.href = "<?php echo $_SERVER['PHP_SELF']; ?>?offset="+offset;
        </script>
        <?php   
    }
    else
    {
        $zonelist = array('Kwajalein' => -12.00, 'Pacific/Midway' => -11.00, 'Pacific/Honolulu' => -10.00, 'America/Anchorage' => -9.00, 'America/Los_Angeles' => -8.00, 'America/Denver' => -7.00, 'America/Tegucigalpa' => -6.00, 'America/New_York' => -5.00, 'America/Caracas' => -4.30, 'America/Halifax' => -4.00, 'America/St_Johns' => -3.30, 'America/Argentina/Buenos_Aires' => -3.00, 'America/Sao_Paulo' => -3.00, 'Atlantic/South_Georgia' => -2.00, 'Atlantic/Azores' => -1.00, 'Europe/Dublin' => 0, 'Europe/Belgrade' => 1.00, 'Europe/Minsk' => 2.00, 'Asia/Kuwait' => 3.00, 'Asia/Tehran' => 3.30, 'Asia/Muscat' => 4.00, 'Asia/Yekaterinburg' => 5.00, 'Asia/Kolkata' => 5.30, 'Asia/Katmandu' => 5.45, 'Asia/Dhaka' => 6.00, 'Asia/Rangoon' => 6.30, 'Asia/Krasnoyarsk' => 7.00, 'Asia/Brunei' => 8.00, 'Asia/Seoul' => 9.00, 'Australia/Darwin' => 9.30, 'Australia/Canberra' => 10.00, 'Asia/Magadan' => 11.00, 'Pacific/Fiji' => 12.00, 'Pacific/Tongatapu' => 13.00);
        $index = array_keys($zonelist, $_REQUEST['offset']);
        $_SESSION['timezone'] = $index[0];
    }
}

date_default_timezone_set($_SESSION['timezone']);

//rest of your code goes here
?>

1
এটি "ডাইটলাইট সেভিং" সামঞ্জস্যগুলির জন্য অ্যাকাউন্ট নয় - ডাবলিনের কোনও ব্যবহারকারী শীতে আপনার 'ইউরোপ / ডাবলিন' এর সাথে মেলে তবে গ্রীষ্মে 'ইউরোপ / বেলগ্রেড'। আপনি যদি বর্তমান অফসেটটি ব্যবহার করতে চলেছেন তবে আপনি যুক্তিসঙ্গতভাবে ধরে নিতে পারেন যে এটি অফসেট, কোনও ভৌগলিক সনাক্তকারী নয়।
IMSoP

8

এই পিএইচপি কোড ব্যবহার করে দেখুন:

<?php
    $ip = $_SERVER['REMOTE_ADDR'];
    $json = file_get_contents("http://api.easyjquery.com/ips/?ip=" . $ip . "&full=true");
    $json = json_decode($json,true);
    $timezone = $json['LocalTimeZone'];
?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.