を決定するユーザのタイムゾーン
-
08-06-2019 - |
質問
ある標準的な方法のためのwebサーバーさを決定することができユーザのタイムゾーン内のウェブページに表示すべき事は何か?
からのHTTPヘッダの user-agent
ん。
正しい解決策はありません
他のヒント
-new Date().getTimezoneOffset()/60;
の方法 getTimezoneOffset()
差し引からお時間GMTびの数を返します。くにお住まいのGMT-8を返しま480.
このに時間割60.また、通りのサインとは逆に必要なもので計算GMTからのオフセットからのお時間帯はお時間にタイムゾーンのGMTからのオフセット.この問題を修正するには、単に倍-1になります。
ることにも注意が w3school "と言ってい
返される値は一定のため、練習用 夏。
最も人気の(==規格とは何ですか?) 方法を決定するタイムゾーンの今を見ることがで い、ユーザーです。 あなたのサイトのご契約が必要で、ここに保存されたユーザのプロフィールデータです。のための匿名ユーザーの日付が表示されたとUTCはGMTある。
うとしたわけじゃないスマート販売.それは要することがあり問題が細かく解外ゆるプログラミングコンテキスト
なHTTPヘッダに報告するお客様のタイムゾーンですがることが示唆されているなどのHTTP仕様となります。
まったくという試みを取り出すタイムゾーンを使用clientside JavaScriptおよびその後に提出しサーバーのデザインにあります。
当サイトでは、以下のブラウザの最も簡単な方法で取得クライアントの現地時間。私はあなたが使用 XMLHttpRequest 送り返し現地時間、場合にエラーが発生した場合、秋のタイムゾーン検出に基づくIPアドレスです。
どgeolocation(ジオロケーション)によっ用 MaxMind含まれる半角 複数のプロジェクトに動作することもなくなったこのタイムゾーンデータです。このサービスがたくさんありますし、毎月更新データベースです。提供されてい包装紙に複数のwebます。
ここで強化するためのJavaScript溶液を決定する時間帯のブラウザです。
>>> var timezone = jstz.determine();
>>> timezone.name();
"Europe/London"
こちらはより完了します。
- のタイムゾーンオフセットのユーザー
- 試験日に夏時間の境界にするかどうかを確認するためにはゾーンを使用する光。
抜粋です。
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;
}
っTZとDSTからJS (帰り機)
第一に、この時間帯を検出JavaScriptが不完全です。を得ることができ地 タイムゾーンオフセット 特定の日時を使用 getTimezoneOffset
onのインスタンス Date
オブジェクトが、それだけではありません、まったく同じとして IANA時間帯 のように America/Los_Angeles
.
あるオプションできるもの:
最近のブラウザを支援IANA時間帯に実施し、 ECMAScript国際化API, 可能になっています:
const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;
その結果を含む文字列のIANA時間帯の設定、コンピュータにコードが走っています。
環境へを掲載 の国際互換性のテーブル.の拡大を図
DateTimeFormat
部の機能の名前resolvedOptions().timeZone defaults to the host environment
.- 一部の図書館など Luxon 本APIを利用するタイムゾーンのような機能によって
luxon.Settings.defaultZoneName
.
- 一部の図書館など Luxon 本APIを利用するタイムゾーンのような機能によって
対応させる必要がある場合には、より多くの環境などの古いwebブラウザをお使いいただけますので図書館を 教育推 のタイムゾーンになります。働いているように
Intl
APIの場合はご用意がないの尋問のgetTimezoneOffset
機能のDate
オブジェクトは、複数の異なる時点は、結果を選択して、適切なタイムゾーンから内部データセットです。両 jsTimezoneDetect や モーメントのタイムゾーン この機能。
// using jsTimeZoneDetect var tzid = jstz.determine().name(); // using moment-timezone var tzid = moment.tz.guess();
いずれの場合においても、結果できたものだと考えていかな。の推測が正しい多くの場合、全員について記入してください。
また、これらの図書館において定期的に更新対策のことを多くの古くからJavaScriptの実装だけを意識し 現在の 夏時間ルールが現地のタイムゾーンになります。 詳細はをこちらです。
最終的には、よりよいアプローチを実際のお願いお客様のユーザーのためにそのタイムゾーンになります。を設定するもので変えることができます。利用できるオプションを一つ選択 デフォルト 設定がないことができなくなると考えるから逸脱中のアプリです。
あるものの全く異なるアプローチ ない に頼るタイムゾーンの設定のユーザーのコンピューターです。代わりに、できれば集まる緯度-経度座標で解決へのタイムゾーンを使用 これらの方法.この作品のモバイルデバイス
使用Unkwntechのアプローチに書いた機能はjQueryを使った、クリアしました。この試なのです。
のPHPのページにしたいのタイムゾーン変数として、このスニペットのコードのどこか近くのページをご覧ください:
<?php
session_start();
$timezone = $_SESSION['time'];
?>
このセッション変数"の"時間"まで約ます。
同一ページに <head>る必要がありのまjQuery:
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
もの <head>下の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を実。
最後にひとつ。ことがあるでしょうかゃtimezone.php です。でもとても簡単です:(新規作成ファイルと呼ばれ timezone.php ポイントで上記のURL)
<?php
session_start();
$_SESSION['time'] = $_GET['time'];
?>
この正常に動作しない問題を、最初のページでは、JavaScriptを実行し、ブラウザで再読み込みしなさい。それを読むことができ、$のタイムゾーン変数を使ってお楽しみです♪で現在のUTC/GMTのタイムゾーン-オフセット(GMT-7)またはずのタイムゾーンされています。
まだまだ見ていない詳細な回答はここを取得します。なんかする必要geocodeによるIPアドレスまたは使用PHP(笑)または誤っからのオフセットされます。
まずはタイムゾーンではありませんからのオフセットGMT.ここでは土地の時間の規定により特定の地域ます。一部の国では夏時間、スイッチDSTが異なる。で、実際のゾーンだけでなく、現在のオフセットされます。
希望する場合はこのタイムゾーンは、インスタンスをユーザーの嗜好をしたいのゾーンだけでなく、オフセットされます。リアルタイム変換なんです。
現在の時間帯では、javascriptを使用できます:
>> new Date().toTimeString();
"15:46:04 GMT+1200 (New Zealand Standard Time)"
//Use some regular expression to extract the time.
しかし見やすくするのは簡単でこの強固なプラグインを返す、オルセンフォントのタイムゾーン:
提出のタイムゾーンオフセットとしてのHTTPヘッダー AJAX要求 jQuery
$.ajaxSetup({
beforeSend: function(xhr, settings) {
xhr.setRequestHeader("X-TZ-Offset", -new Date().getTimezoneOffset()/60);
}
});
こともできないようなものを実際のタイムゾーン名を使用 moment.tz.guess();
から http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/
のPHP date
機能を取得します日時のサーバーのサイトがあります。に取得する唯一の方法は、ユーザはJavaScriptを使用しています。
がけていただきたい、サイトの場合は、登録に必要なのが、ユーザーがいて登録を義務付けます。が覧いただけます様々な時間帯に登録ページに保存し、データベースです。この場合、ユーザーでログインのサイトを設定できますデフォルトのタイムゾーンとセッションとして、ユーザの選択したタイムゾーンになります。
を設定できる特定の時間帯を利用した数 date_default_timezone_set
.このセットの指定されたタイムゾーン。
基本的には、ユーザーの時間帯はクライアント側もしなければなJavaScriptを使用します。
以下のスクリプトをユーザーの時間帯を利用PHPとJavaScriptを用いる事によって
<?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();
?>
もし自分がしてもらい、ユーザーが登録が義務付けられます。
簡単に、利用のJavaScript getTimezoneOffset
機能はこのように:
-new Date().getTimezoneOffset()/60;
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;
}
単なるご回Unixタイムスタンプの形式がこの機能JavaScriptの既知のタイムゾーンはユーザーです。
このように:
PHP:
echo '<script type="text/javascript">
var eltimio = maketimus('.$unix_timestamp_ofshiz.');
document.write(eltimio);
</script><noscript>pls enable javascript</noscript>';
このままメインメニューからツールに正確に基づきタイムゾーンの人は彼/彼女のコンピュータークロックです。する必要がないなんでも聞いても保存して、感謝致します!
魔法のすべてに入っているように感じられ
visitortime.getTimezoneOffset()
ホットでクールなあなたに、私は知っています。な仕組みになっているのInternet Explorerなどが有ります。から対応することができるでしょうJavaScriptを使用Ajax、クッキーなどを実行します。さんかくクッキーのルートです。
する必要があります、ユーザーに変更があります。ものを使用するよう努めてgeolocation(ジオロケーション)(maxmind)この中で間違っていた合理的によく保つのに十分なだけ残っているのではないでしを行う事によって、ユーザの設定ではプロファイルは、ショー通知のユーザーになセットだよん。
な利用のIPアドレス位置決め位置でのタイムゾーン)--それとNAT、プロキシ(人気急上昇)、Vpn、IPアドレスが必ずしも現実的に反映して、ユーザーの位置が、位置、サーバの実施そのプロトコルに居住する
同様のどのようにUSのコードがなくなりに役立つ文化や情報の発信拠点として電話ユーザーに人気の番号ポータビリティー
IPアドレス、住所その他の技術上に役立つ ることが示唆されるデフォルト そのユーザーにて調整します。
こちらの記事(ソースコード)を説明するかの決定は、利用局所時間にASP.NET (VB.NET C#)用途:
に記載のアプローチに依存してのJavaScript getTimezoneOffset
機能の値を返す保存されたセッションクッキーを使用するコードの背後に調整時間の値の間GMTと。のカリックするとnhkサイトを離れのないユーザを指定する必要がある時間帯のコードは自動的に).あり(このはなぜ記事へのリンクが提供コードでも使いやすいです。疑いできる変換は、"ロジカル(論理的)であるPHPその他言語などを理解すASP.NET).
シンプルですがJavaScriptとPHP:
でも、ユーザーが混乱身内部クロックおよび/またはタイムゾーンの最良の方法は、またこれまでのオフセット、 new Date().getTimezoneOffset();
.では、非侵襲的な頭痛が不要な第三者が有する
いいテーブル users
, とを含む分野 date_created int(13)
, 貯Unixタイムスタンプ;
仮にクライアント creates a new account
, データを受信した post
, は、 insert/update
の date_created column
クライアントのUnixタイムスタンプは、サーバーです。
以降、timezoneOffsetが必要な時に挿入/更新、渡されることもあるかもしれない$_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トタイムスタンプのように:
$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価値をユーザーにテーブルは、今後の参考のため、として設定することでセッションとしてクッキー.
P.S.その場合、ユーザーの旅やスイッチのタイムゾーン.ログインでGMT+4を旅速GMT-1およびログインです。ログインの際には、最終ログインする。
思い---まして深く考えがちです。
なにができるので、クライアント モーメントのタイムゾーン 送信値をサーバ;使用例:
> moment.tz.guess()
"America/Asuncion"
簡単な方法で利用:
new Date().getTimezoneOffset();
く有効なTZデータベースのタイムゾーンの名前PHPは、二段階のプロセス:
JavaScriptでは、タイムゾーンオフセット分を通じて
getTimezoneOffset
.このオフセットは正の場合は現地のタイムゾーンがUTC負います。いてくれるものでなければなりませ逆の符号を相殺するものとする。var timezone_offset_minutes = new Date().getTimezoneOffset(); timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes;
このオフセットをクリアしました。
PHPに変換するこのオフセットの有効なタイムゾーン名 timezone_name_from_abbr 機能です。
// 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>
長々と書きましたが、ブログかれています。 をユーザーのタイムゾーンはPHP.でもが含まれていました
このオプションの利用 Date
ヘッダフィールドが定義される RFC7231 する報告を行い、それぞれのタイムゾーン.もちろん、保証するものではありませんこの値はクライアントのタイムゾーンが可能であり、これまでのようにすると便利です。
こちらはどのようんです。この設定はPHPのデフォルトのタイムゾーンはユーザーの地域タイムゾーン.ーを貼り付けるだけで以下の全てのページ:
<?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
?>
この記事のPHPコード:
<?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'];
?>