ওয়েব পৃষ্ঠার মধ্যে কোনও ব্যবহারকারীর টাইমজোন নির্ধারণের জন্য কোনও ওয়েব সার্ভারের কি কোনও মানক উপায় আছে?
সম্ভবত কোনও এইচটিটিপি শিরোনাম বা user-agent
স্ট্রিংয়ের কিছু অংশ থেকে ?
ওয়েব পৃষ্ঠার মধ্যে কোনও ব্যবহারকারীর টাইমজোন নির্ধারণের জন্য কোনও ওয়েব সার্ভারের কি কোনও মানক উপায় আছে?
সম্ভবত কোনও এইচটিটিপি শিরোনাম বা user-agent
স্ট্রিংয়ের কিছু অংশ থেকে ?
উত্তর:
-new Date().getTimezoneOffset()/60;
পদ্ধতিটি getTimezoneOffset()
GMT থেকে আপনার সময়কে বিয়োগ করবে এবং মিনিটের সংখ্যাটি ফিরিয়ে দেবে। সুতরাং আপনি যদি GMT-8 এ থাকেন তবে এটি 480 ফেরত আসবে।
এটিকে কয়েক ঘণ্টার মধ্যে রাখার জন্য, 60 টি দিয়ে বিভক্ত করুন Also এছাড়াও লক্ষ করুন যে সাইনটি আপনার যা প্রয়োজন তার বিপরীত - এটি GMT এর অফসেটটি আপনার টাইম অঞ্চল থেকে গণনা করছে, GMT থেকে আপনার টাইম জোনের অফসেট নয়। এটি ঠিক করতে, কেবল -1 দিয়ে গুণ করুন।
এছাড়াও নোট করুন যে ডাব্লু 3 স্কুল বলে:
ডেটলাইট সেভিং টাইম ব্যবহারের অনুশীলনের কারণে প্রত্যাবর্তিত মানটি একটি ধ্রুবক নয়।
>>> date.toTimeString() "15:46:04 GMT+1200 (New Zealand Standard Time)"
চারপাশের সময় অঞ্চল নির্ধারণের সর্বাধিক জনপ্রিয় (== মান?) উপায়টি কেবল ব্যবহারকারীদের নিজেরাই জিজ্ঞাসা করা। যদি আপনার ওয়েবসাইটের সাবস্ক্রিপশন প্রয়োজন, এটি ব্যবহারকারীর প্রোফাইল ডেটাতে সংরক্ষণ করা যেতে পারে। আনোন ব্যবহারকারীদের জন্য, তারিখগুলি ইউটিসি বা জিএমটি বা এ জাতীয় কিছু হিসাবে প্রদর্শিত হতে পারে।
আমি স্মার্ট আলেক হওয়ার চেষ্টা করছি না এটি ঠিক যে কখনও কখনও কিছু সমস্যার কোনও প্রোগ্রামিং প্রসঙ্গে বাইরে সূক্ষ্ম সমাধান রয়েছে।
এমন কোনও HTTP শিরোনাম নেই যা এ পর্যন্ত এইচটিটিপি নির্দিষ্টকরণের মধ্যে অন্তর্ভুক্ত করার পরামর্শ দেওয়া হলেও ক্লায়েন্টদের টাইমজোনটির প্রতিবেদন করবে।
এটি যদি আমি হয় তবে আমি ক্লায়েন্টাইড জাভাস্ক্রিপ্ট ব্যবহার করে টাইমজোনটি আনার চেষ্টা করব এবং তারপরে এটি অ্যাজাক্স বা অন্য কিছু ব্যবহার করে সার্ভারে জমা দেব।
জাভাস্ক্রিপ্ট ক্লায়েন্টের স্থানীয় সময় পাওয়ার সহজতম উপায়। স্থানীয় সময়টি ফেরত পাঠানোর জন্য আমি এক্সএমএলএইচটিপিআরকোয়েস্ট ব্যবহার করার পরামর্শ দেব এবং যদি এটি ব্যর্থ হয় তবে তাদের আইপি ঠিকানার ভিত্তিতে সনাক্ত করা টাইমজোনটিতে ফিরে যান।
ভূ-অবস্থান হিসাবে আমি বেশ কয়েকটি প্রকল্পে ম্যাক্সমাইন্ড জিওআইপি ব্যবহার করেছি এবং এটি ভাল কাজ করে, যদিও তারা টাইমজোন ডেটা সরবরাহ করে কিনা তা আমি নিশ্চিত নই। এটি আপনার দেওয়া অর্থ এবং এটি আপনার ডাটাবেসে মাসিক আপডেট সরবরাহ করে updates তারা বেশ কয়েকটি ওয়েব ভাষায় মোড়ক সরবরাহ করে।
প্রথমত, জাভাস্ক্রিপ্টে টাইম অঞ্চল সনাক্তকরণ অসম্পূর্ণ তা বুঝতে understand আপনি কোনও নির্দিষ্ট তারিখ এবং সময়ের জন্য অবজেক্টের উদাহরণ ব্যবহার করে স্থানীয় সময় অঞ্চলটি অফসেট পেতে পারেন , তবে এটি পুরো আইএএনএ টাইম জোনের মতো নয় ।getTimezoneOffset
Date
America/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();
উভয় ক্ষেত্রেই ফলাফলটি কেবল অনুমান হিসাবেই ভাবা যায়। অনুমানটি অনেক ক্ষেত্রে সঠিক হতে পারে তবে তাদের সবকটিই নয়।
উপরন্তু, এই লাইব্রেরি পর্যায়ক্রমে সত্য যে অনেক পুরোনো জাভাস্ক্রিপ্ট বাস্তবায়নের একমাত্র সচেতন নিবারণ আপডেট করতে হবে বর্তমান তাদের স্থানীয় সময় অঞ্চল জন্য দিবালোক সংরক্ষণ সময় নিয়ম। এখানে আরও বিশদ।
শেষ পর্যন্ত, আরও ভাল পন্থা হ'ল আপনার ব্যবহারকারীকে তাদের সময় অঞ্চলটির জন্য জিজ্ঞাসা করা। তারা পরিবর্তন করতে পারে এমন একটি সেটিং সরবরাহ করুন। আপনি ডিফল্ট সেটিংস চয়ন করতে উপরের বিকল্পগুলির মধ্যে একটি ব্যবহার করতে পারেন , তবে এটি আপনার অ্যাপ্লিকেশন থেকে সরিয়ে নেওয়া অসম্ভব করবেন না।
ব্যবহারকারীর কম্পিউটারের টাইম জোন সেটিংয়ের উপর নির্ভর না করার সম্পূর্ণ ভিন্ন পদ্ধতি রয়েছে । পরিবর্তে, যদি আপনি অক্ষাংশ এবং দ্রাঘিমাংশ স্থানাঙ্কগুলি সংগ্রহ করতে পারেন তবে আপনি এই পদ্ধতিগুলির মধ্যে একটি ব্যবহার করে সময় অঞ্চলকে সমাধান করতে পারেন । এটি মোবাইল ডিভাইসগুলিতে ভাল কাজ করে।
ব্রাউজারটি যে টাইম জোনে রয়েছে তা নির্ধারণের জন্য এখানে একটি শক্তিশালী জাভাস্ক্রিপ্ট সমাধান রয়েছে।
>>> var timezone = jstz.determine();
>>> timezone.name();
"Europe/London"
https://bitbucket.org/pellepim/jstimezonedetect
পরিশিষ্ট 1: এখন এই প্রকল্পটি গিটহাব: https://github.com/pellepim/jsimezonedetect এ অবস্থিত
এখানে আরও একটি সম্পূর্ণ উপায়।
একটি উদ্ধৃতি নীচে:
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;
}
জেএস থেকে টিজেড এবং ডিএসটি পাওয়া (ওয়ে ব্যাক মেশিনের মাধ্যমে)
Africa/Johannesburg
বা Europe/Istanbul
। দেখুন টাইমজোন ট্যাগ উইকি ।
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) বা আপনি যে টাইমজোনটিতে রয়েছেন তা ফেরৎ দেয়।
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();
থেকে ব্যবহার করে প্রকৃত সময় অঞ্চল নাম পেতে অনুরূপ কিছু করতে পারেন
আমি এখনও এখানে একটি বিশদ উত্তর দেখতে পাইনি যা সময় অঞ্চল পায়। আপনার আইপি ঠিকানার মাধ্যমে জিওকোড বা পিএইচপি (এলওএল) ব্যবহার করা বা অফসেট থেকে ভুল অনুমান করার দরকার নেই।
প্রথমত কোনও সময় অঞ্চল GMT থেকে অফসেট নয়। এটি জমির এমন একটি অঞ্চল যেখানে স্থানীয় মানদণ্ড অনুসারে সময় নিয়ম নির্ধারণ করা হয়। কিছু দেশে দিবালোকের সঞ্চয় রয়েছে এবং বিভিন্ন সময়ে ডিএসটি স্যুইচ করবে। কেবলমাত্র অফসেট নয়, প্রকৃত অঞ্চলটি পাওয়া সাধারণত গুরুত্বপূর্ণ।
যদি আপনি এই টাইমজোনটি সংরক্ষণ করতে চান তবে ব্যবহারকারীর পছন্দসই ক্ষেত্রে আপনি অঞ্চলটি চান কেবল অফসেটটি নয়। রিয়েলটাইম রূপান্তরগুলির জন্য এটি খুব বেশি গুরুত্বপূর্ণ নয়।
এখন, জাভাস্ক্রিপ্ট সহ সময় অঞ্চল পেতে আপনি এটি ব্যবহার করতে পারেন:
>> new Date().toTimeString();
"15:46:04 GMT+1200 (New Zealand Standard Time)"
//Use some regular expression to extract the time.
তবে আমি সহজেই এই শক্তসমর্থ প্লাগইনটি ব্যবহার করা সহজ বলে মনে করেছি যা ওলসেন ফর্ম্যাট টাইমজোনটি দেয়:
পিএইচপি সহ 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();
?>
তবে আমার দৃষ্টিকোণ অনুসারে, আপনার প্রকল্পে নিবন্ধন বাধ্যতামূলক কিনা তা ব্যবহারকারীদের কাছে জিজ্ঞাসা করা ভাল।
অবস্থান নির্ধারণের জন্য আইপি ঠিকানাটি ব্যবহার করবেন না (এবং তাই সময় অঞ্চল) - এটি NAT, প্রক্সিগুলি (ক্রমবর্ধমান জনপ্রিয়) এবং ভিপিএন সহ আইপি অ্যাড্রেসগুলি ব্যবহারকারীর আসল অবস্থানটি অবশ্যই বাস্তবতার সাথে প্রতিফলিত করে না তবে সেই অবস্থানটিতে সার্ভারগুলি prot প্রোটোকলগুলি প্রয়োগ করে।
সংখ্যার বহনযোগ্যতার জনপ্রিয়তাকে বিবেচনা করে কীভাবে মার্কিন অঞ্চল কোডগুলি টেলিফোন ব্যবহারকারী সনাক্ত করার জন্য আর কার্যকর হয় না।
উপরে প্রদর্শিত আইপি ঠিকানা এবং অন্যান্য কৌশলগুলি কোনও ডিফল্ট পরামর্শ দেওয়ার জন্য দরকারী যা ব্যবহারকারীর সামঞ্জস্য / সঠিক করতে পারে।
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শ্বরকে ধন্যবাদ!
সহজ, ঠিক তেমন জাভাস্ক্রিপ্ট getTimezoneOffset
ফাংশন ব্যবহার করুন :
-new Date().getTimezoneOffset()/60;
যাদু সব মনে হয়
visitortime.getTimezoneOffset()
এটি দুর্দান্ত, আমি সে সম্পর্কে জানতাম না। এটি ইন্টারনেট এক্সপ্লোরার ইত্যাদিতে কাজ করে? সেখান থেকে আপনার জাভাস্ক্রিপ্ট অ্যাজাক্সে ব্যবহার করতে সক্ষম হবে, কুকিজ সেট করুন, যাই হোক না কেন। আমি সম্ভবত নিজেই কুকির পথে যেতে চাই।
আপনাকে যদিও এটির পরিবর্তনের জন্য ব্যবহারকারীকে অনুমতি দেওয়া দরকার। আমরা কিছুক্ষণ আগে এটি করার জন্য জিওলোকেশন (ম্যাক্সমাইন্ডের মাধ্যমে) ব্যবহার করার চেষ্টা করেছি এবং এটি প্রায়শই ভুল ছিল - এটি করার পক্ষে যথেষ্ট নয়, তাই আমরা কেবল ব্যবহারকারীকে এটি তাদের প্রোফাইলে সেট করতে দিয়েছি এবং ব্যবহারকারীদের একটি বিজ্ঞপ্তি দেখিয়েছি এখনও তাদের সেট করা হয়নি।
এখানে একটি নিবন্ধ (উত্স কোড সহ) এখানে এএসপি.এনইটি (ভিবি.এনইটি, সি #) অ্যাপ্লিকেশনটিতে কীভাবে স্থানীয় সময় নির্ধারণ এবং ব্যবহার করা যায় তা ব্যাখ্যা করা হয়েছে:
সংক্ষেপে, বর্ণিত পদ্ধতিটি জাভাস্ক্রিপ্ট getTimezoneOffset
ফাংশনের উপর নির্ভর করে , যা সেশন কুকিতে সংরক্ষিত এবং জিএমটি এবং স্থানীয় সময়ের মধ্যে সময়ের মানগুলি সামঞ্জস্য করার জন্য কোড-ব্যাক দ্বারা ব্যবহৃত মানটি দেয়। সুন্দর জিনিসটি হ'ল ব্যবহারকারীর সময় অঞ্চল নির্দিষ্ট করার দরকার নেই (কোড এটি স্বয়ংক্রিয়ভাবে করে)। আরও জড়িত রয়েছে (এই কারণেই আমি নিবন্ধটির সাথে লিঙ্ক করি), তবে প্রদত্ত কোড ব্যবহার করা সত্যিই সহজ করে তোলে। আমি সন্দেহ করি যে আপনি যুক্তিটিকে পিএইচপি এবং অন্যান্য ভাষায় রূপান্তর করতে পারবেন (যতক্ষণ আপনি এএসপি.এনইটি বোঝেন)।
আপনি যদি প্রমাণীকরণের জন্য ওপেনআইডি ব্যবহার করেন, সরল নিবন্ধকরণ এক্সটেনশন প্রমাণীকৃত ব্যবহারকারীদের জন্য সমস্যাটি সমাধান করবে (আপনাকে টিজেড থেকে সংখ্যায় রূপান্তর করতে হবে)।
আরেকটি বিকল্প হ'ল ব্যবহারকারীর এজেন্টের দেশ পছন্দ থেকে সময় অঞ্চল নির্ধারণ করা। এটি কিছুটা অপরিশোধিত পদ্ধতি (এন-ইউএস-এর জন্য কাজ করবে না) তবে এটি একটি ভাল অনুমান করে।
এটি জাভাস্ক্রিপ্ট এবং পিএইচপি সহ সহজ:
যদিও ব্যবহারকারী তার / তার অভ্যন্তরীণ ঘড়ির সাথে এবং / অথবা টাইমজোন নিয়ে গণ্ডগোল করতে পারে, অফসেটটি পাওয়ার জন্য আমি এ পর্যন্ত পাওয়া সবচেয়ে ভাল উপায়, রয়ে গেছে new Date().getTimezoneOffset();
। এটি আক্রমণাত্মক নয়, মাথা ব্যথা দেয় না এবং তৃতীয় পক্ষের উপর নির্ভর করার প্রয়োজনকে দূর করে।
ইউনিক্স টাইমস্ট্যাম্পগুলি সঞ্চয় করার জন্য আমার কাছে একটি টেবিল users
রয়েছে, এটিতে একটি ক্ষেত্র রয়েছে date_created int(13)
;
একটি ক্লায়েন্ট ধরে নেওয়া যাক creates a new account
, ডাটা দ্বারা গৃহীত হয়েছে post
, এবং আমি প্রয়োজন ক্লায়েন্টের ইউনিক্স টাইমস্ট্যাম্প না সার্ভারের সঙ্গে।insert/update
date_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 এ দ্রুত ভ্রমণ করে এবং আবার লগ ইন করে। শেষ লগইন ভবিষ্যতে হবে।
আমার মনে হয় ... আমরা অনেক বেশি ভাবি।
আপনি মুহুর্তের সময় অঞ্চল দিয়ে ক্লায়েন্টে এটি করতে এবং মানটি সার্ভারে প্রেরণ করতে পারেন; নমুনা ব্যবহার:
> moment.tz.guess()
"America/Asuncion"
পিএইচপি-তে একটি বৈধ টিজেড ডাটাবেস টাইমজোন নাম পাওয়া একটি দ্বি-পদক্ষেপ প্রক্রিয়া:
জাভাস্ক্রিপ্ট সহ, মিনিট কয়েকের মধ্যে টাইমজোন অফসেট পান getTimezoneOffset
। স্থানীয় সময় অঞ্চলটি ইউটিসির পিছনে থাকলে এবং যদি এগিয়ে থাকে তবে এই অফসেটটি ইতিবাচক হবে be সুতরাং আপনাকে অবশ্যই অফসেটে একটি বিপরীত চিহ্ন যুক্ত করতে হবে।
var timezone_offset_minutes = new Date().getTimezoneOffset();
timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes;
এই অফসেটটি পিএইচপি-তে পাস করুন।
পিএইচপি-তে এই অফসেটটিকে টাইমজোন_নাম_ফর্ম_এবব্রি ফাংশন সহ একটি বৈধ টাইমজোন নামে রূপান্তর করুন ।
// 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>
আমি এটিতে একটি ব্লগ পোস্ট লিখেছি: পিএইচপি- তে ব্যবহারকারী সময় অঞ্চল কীভাবে সনাক্ত করতে হয় । এটিতে একটি ডেমোও রয়েছে।
Intl.DateTimeFormat().resolvedOptions().timeZone
এটি ওয়েব সার্ভারে কল করে প্রেরণ করা। রেফ: স্ট্যাকওভারফ্লো.com
এটি করার একটি সহজ উপায় হ'ল:
new Date().getTimezoneOffset();
একটি সম্ভাব্য বিকল্প Date
হ্যাডার ক্ষেত্রটি ব্যবহার করা হয় যা আরএফসি 7231 এ সংজ্ঞায়িত হয় এবং সময় অঞ্চলটি অন্তর্ভুক্ত করার কথা। অবশ্যই, এটির নিশ্চয়তা নেই যে মানটি সত্যই ক্লায়েন্টের টাইমজোন, তবে এটি একটি সুবিধাজনক সূচনা পয়েন্ট হতে পারে।
আমি এখানে এটি কিভাবে। এটি ব্যবহারকারীর স্থানীয় সময় অঞ্চলে পিএইচপি ডিফল্ট সময় অঞ্চল সেট করবে 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
?>