ユーザーのタイムゾーンを決定します -- html フィールド と browser フィールド と timezone フィールド と user-agent フィールド と timezone-offset フィールド 関連 問題

Determine a user's timezone












635
vote

問題

日本語

WebサーバーがWebページ内のユーザーのタイムゾーンを決定できるようにするための標準的な方法はありますか?

おそらくHTTPヘッダーまたは<コード> Form7 string?

英語

Is there a standard way for a web server to be able to determine a user's timezone within a web page?

Perhaps from an HTTP header or part of the user-agent string?

</div
              
         
         

回答リスト

329
 
vote
<事前> <コード> public string RelativeDateTimeCount(DateTime inputDateTime) { string outputDateTime = string.Empty; TimeSpan ts = DateTime.Now - inputDateTime; if (ts.Days > 7) { outputDateTime = inputDateTime.ToString("MMMM d, yyyy"); } else if (ts.Days > 0) { outputDateTime = ts.Days == 1 ? ("about 1 Day ago") : ("about " + ts.Days.ToString() + " Days ago"); } else if (ts.Hours > 0) { outputDateTime = ts.Hours == 1 ? ("an hour ago") : (ts.Hours.ToString() + " hours ago"); } else if (ts.Minutes > 0) { outputDateTime = ts.Minutes == 1 ? ("1 minute ago") : (ts.Minutes.ToString() + " minutes ago"); } else outputDateTime = "few seconds ago"; return outputDateTime; } 1

メソッド Int3212 はGMTからの時間を差し引き、分数を返します。それであなたがGMT-8に住んでいるならば、それは480を返します。

これを時間に入れるには、60分を除算します。また、符号はあなたが必要とするものの反対であることに注意してください - それはあなたの時間帯からのGMTのオフセットを計算しています。これを修正するために、単に-1を掛けます。

W3School 次のように述べています:

使用する練習のため、戻り値は一定ではありません。 夏時間。

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

The method getTimezoneOffset() will subtract your time from GMT and return the number of minutes. So if you live in GMT-8, it will return 480.

To put this into hours, divide by 60. Also, notice that the sign is the opposite of what you need - it's calculating GMT's offset from your time zone, not your time zone's offset from GMT. To fix this, simply multiply by -1.

Also note that w3school says:

The returned value is not a constant, because of the practice of using Daylight Saving Time.

</div
 
 
         
         
198
 
vote

最も人気のある(==標準?)私が見た時間帯を決定する方法は単にユーザー自身を尋ねることです。あなたのウェブサイトが購読を必要とするならば、これはユーザーに保存することができますプロファイルデータ。 ANONユーザーの場合、日付はUTCまたはGMTまたはそのようなものとして表示される可能性があります。

私はスマートなaleckになろうとしていません。時々、プログラミングコンテキストの外側にはより細かい解決策があります。

 

The most popular (==standard?) way of determining the time zone I've seen around is simply asking the users themselves. If your website requires subscription, this could be saved in the users' profile data. For anon users, the dates could be displayed as UTC or GMT or some such.

I'm not trying to be a smart aleck. It's just that sometimes some problems have finer solutions outside of any programming context.

</div
 
 
         
         
152
 
vote

HTTP仕様に含めることが提案されているが、これまでのところクライアントのタイムゾーンを報告するHTTPヘッダはありません。

それが私だったら、私はおそらくClientside JavaScriptを使ってTimeZoneを取得してから、Ajaxか何かを使ってサーバーに送信しようとします。

 

There are no HTTP headers that will report the clients timezone so far although it has been suggested to include it in the HTTP specification.

If it was me, I would probably try to fetch the timezone using clientside JavaScript and then submit it to the server using Ajax or something.

</div
 
 
         
         
68
 
vote

まず、JavaScriptのタイムゾーン検出が不完全であることを理解してください。 Date オブジェクトのインスタンスの getTimezoneOffset を使用して、ローカルタイムゾーンオフセットを特定の日時に取得できますが、それだけではありません。 full IANA TIME ZONE

のようなものと同じです。

作業できるオプションがいくつかあります:

  • 最新のブラウザは、 ECMAScript国際化API 、あなたはこれを行うことができます:

 <コード> const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone; console.log(tzid);  

結果は、コードが実行されているコンピュータのIANAタイムゾーン設定を含む文字列です。

サポートされている環境がリストされています INTL互換性表< / a>。 DateTimeFormat のセクションを展開し、 resolvedOptions().timeZone defaults to the host environment

という機能を調べます。
  • いくつかのライブラリー、 Luxon このAPIを使用して機能を介してタイムゾーンを決定する luxon.Settings.defaultZoneName のように。

  • 古いWebブラウザなどのより広い環境セットをサポートする必要がある場合は、ライブラリを使用してタイムゾーンで教育推測にすることができます。最初に Intl APIが利用可能な場合は、 Date オブジェクトの getTimezoneOffset 関数を尋問してください。結果を使用して、内部データセットから適切なタイムゾーンを選択してください。

    両方とも jstimezoneDetect とモーメントタイムゾーンこの機能を持ちます。

    <事前> <コード> Date0

    両方の場合において、結果は推測としてのみ考えられます。推測は多くの場合、それらのすべてではないかもしれません。

    さらに、これらのライブラリは、多くの古いJavaScript実装がそれらの現地時間帯の current 夏時間規則にのみ認識されるという事実を中心に更新する必要があります。 nofollow noreferrer">その他の詳細。 < / P>

最終的には、より良いアプローチは実際に自分の時間帯をあなたのユーザーに尋ねることです。彼らが変更できるような設定を提供してください。上記のいずれかのオプションを使用して、 default 設定を選択できますが、アプリの中から逸脱することは不可能にしないでください。

ユーザのコンピュータのタイムゾーン設定に頼るの完全に異なるアプローチもあります。代わりに、緯度と経度の座標を収集できる場合は、これらのメソッドの1つを使用して、タイムゾーンに解決できます。これはモバイル機器でうまく機能します。

 

First, understand that time zone detection in JavaScript is imperfect. You can get the local time zone offset for a particular date and time using getTimezoneOffset on an instance of the Date object, but that's not quite the same as a full IANA time zone like America/Los_Angeles.

There are some options that can work though:

  • Most modern browsers support IANA time zones in their implementation of the ECMAScript Internationalization API, so you can do this:

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

The result is a string containing the IANA time zone setting of the computer where the code is running.

Supported environments are listed in the Intl compatibility table. Expand the DateTimeFormat section, and look at the feature named resolvedOptions().timeZone defaults to the host environment.

  • Some libraries, such as Luxon use this API to determine the time zone through functions like luxon.Settings.defaultZoneName.

  • If you need to support an wider set of environments, such as older web browsers, you can use a library to make an educated guess at the time zone. They work by first trying the Intl API if it's available, and when it's not available, they interrogate the getTimezoneOffset function of the Date object, for several different points in time, using the results to choose an appropriate time zone from an internal data set.

    Both jsTimezoneDetect and moment-timezone have this functionality.

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

    In both cases, the result can only be thought of as a guess. The guess may be correct in many cases, but not all of them.

    Additionally, these libraries have to be periodically updated to counteract the fact that many older JavaScript implementations are only aware of the current daylight saving time rule for their local time zone. More details on that here.

Ultimately, a better approach is to actually ask your user for their time zone. Provide a setting that they can change. You can use one of the above options to choose a default setting, but don't make it impossible to deviate from that in your app.

There's also the entirely different approach of not relying on the time zone setting of the user's computer at all. Instead, if you can gather latitude and longitude coordinates, you can resolve those to a time zone using one of these methods. This works well on mobile devices.

</div
 
 
     
     
54
 
vote

JavaScriptは、クライアントの現地時間を取得する最も簡単な方法です。 xmlhttpreequest を使用して現地時間を送って送信することをお勧めします。 IPアドレスに基づいて検出されたタイムゾーン。

地理位置情報を使用して、いくつかのプロジェクトで maxmind geoip 私は彼らがタイムゾーンデータを提供するかどうかはよく働きます。それはあなたが支払うサービスです、そして彼らはあなたのデータベースに毎月のアップデートを提供します。彼らはいくつかのWeb言語にラッパーを提供します。

 

JavaScript is the easiest way to get the client's local time. I would suggest using an XMLHttpRequest to send back the local time, and if that fails, fall back to the timezone detected based on their IP address.

As far as geolocation, I've used MaxMind GeoIP on several projects and it works well, though I'm not sure if they provide timezone data. It's a service you pay for and they provide monthly updates to your database. They provide wrappers in several web languages.

</div
 
 
   
   
52
 
vote

これは、ブラウザが入っているタイムゾーンを決定するための堅牢なJavaScriptソリューションです。

<事前> <コード> >>> var timezone = jstz.determine(); >>> timezone.name(); "Europe/London"

https://github.com/pellepim/jstimezoneDetect

 

Here is a robust JavaScript solution to determine the time zone the browser is in.

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

https://github.com/pellepim/jstimezonedetect

</div
 
 
       
       
43
 
vote

これはより完全な方法です。

  1. ユーザーのタイムゾーンオフセットを取得します
  2. 夏時間を節約する範囲を夏時間の節約でテストして、夏時間を節約するゾーン内にあるかどうかを判断します。
  3. 抜粋は以下のとおりです。

    <事前> <コード> 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; }

    JS (Via Pout Back Machine)からTZとDSTを取得する

 

Here is a more complete way.

  1. Get the timezone offset for the user
  2. Test some days on daylight saving boundaries to determine if they are in a zone that uses daylight saving.

An excerpt is below:

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; } 

Getting TZ and DST from JS (via Way Back Machine)

</div
 
 
   
   
33
 
vote

UNKWNTECHのアプローチを使用して、jQueryとPHPを使用して関数を書きました。これはテストされて仕事をします!

TimeZoneを変数として持ちたいPHPページでは、このページの上部近くのコードのスニペットがあります。

<事前> <コード> <?php session_start(); $timezone = $_SESSION['time']; ?>

これはセッション変数 "time"を読みます。

同じページでは、&lt; head&gt;まず最初にjQueryを含める必要があります:

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

また、jqueryの下にある、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を変更する必要があります。

最後のもの。あなたはおそらくHeck Timezone.phpが何であるか疑問に思います。まあ、それは単にこれです: ( timezone.php という新しいファイルを作成し、上記のURLでそれを指す)

<事前> <コード> <?php session_start(); $_SESSION['time'] = $_GET['time']; ?>

これが正しく機能する場合は、最初にページをロードし、JavaScriptを実行してページをリロードします。その後、$ TIMEZONE変数を読み、それをあなたの喜びに使うことができるでしょう!現在のUTC / GMTタイムゾーンオフセット(GMT -7)またはあなたが存在するタイムゾーンを返します。

 

Using Unkwntech's approach, I wrote a function using jQuery and PHP. This is tested and does work!

On the PHP page where you want to have the timezone as a variable, have this snippet of code somewhere near the top of the page:

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

This will read the session variable "time", which we are now about to create.

On the same page, in the <head>, you need to first of all include jQuery:

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

Also in the <head>, below the jQuery, paste this:

<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> 

You may or may not have noticed, but you need to change the URL to your actual domain.

One last thing. You are probably wondering what the heck timezone.php is. Well, it is simply this: (create a new file called timezone.php and point to it with the above URL)

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

If this works correctly, it will first load the page, execute the JavaScript, and reload the page. You will then be able to read the $timezone variable and use it to your pleasure! It returns the current UTC/GMT time zone offset (GMT -7) or whatever timezone you are in.

</div
 
 
   
   
26
 
vote

jquery

でAjax要求に関するHTTPヘッダとしてタイムゾーンオフセットを送信する <事前> <コード> $.ajaxSetup({ beforeSend: function(xhr, settings) { xhr.setRequestHeader("X-TZ-Offset", -new Date().getTimezoneOffset()/60); } });

moment.tz.guess(); から http://momentjs.com/timezone/docs/#/using-timzones/guessing-user-timzone/

 

To submit the timezone offset as an HTTP header on AJAX requests with jQuery

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

You can also do something similar to get the actual time zone name by using moment.tz.guess(); from http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/

</div
 
 
   
   
25
 
vote

私はまだタイムゾーンを取得するここで詳細な答えを見ていません。 IPアドレスでジオコードする必要はないか、PHP(LOL)を使用するか、オフセットから誤って推測してください。

最初にタイムゾーンはGMTからのオフセットだけではありません。時間規則が地域規格で設定されている土地の分野です。一部の国は夏時間を節約し、異なる時点でDSTをオンにします。現在のオフセットだけではなく、実際のゾーンを手に入れることが通常重要です。

このタイムゾーンを保存する場合は、例えばゾーンに必要なユーザー設定で、オフセットだけでなく、ゾーンを必要とします。リアルタイム変換のためには問題はありません。

今、JavaScriptを使用してタイムゾーンを取得するには、これを使用できます。

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

しかし、この堅牢なプラグインを単に使用しやすく、Olsenフォーマットのタイムゾーンを返します。

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

 

I still have not seen a detailed answer here that gets the time zone. You shouldn't need to geocode by IP address or use PHP (lol) or incorrectly guess from an offset.

Firstly a time zone is not just an offset from GMT. It is an area of land in which the time rules are set by local standards. Some countries have daylight savings, and will switch on DST at differing times. It's usually important to get the actual zone, not just the current offset.

If you intend to store this timezone, for instance in user preferences you want the zone and not just the offset. For realtime conversions it won't matter much.

Now, to get the time zone with javascript you can use this:

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

However I found it easier to simply use this robust plugin which returns the Olsen formatted timezone:

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

</div
 
 
23
 
vote

PHP date 関数では、サイトが配置されているサーバーの日付時刻が取得されます。ユーザーの時間を取得する唯一の方法はJavaScriptを使用することです。

しかし、あなたのサイトが必要な場合には、最善の方法で、登録を強制フィールドとして登録しながらユーザーに尋ねることです。レジスタページにさまざまなタイムゾーンを一覧表示して、データベースに保存できます。その後、ユーザーがサイトにログインした場合は、ユーザーの選択されたタイムゾーンに従ってそのセッションのデフォルトのタイムゾーンを設定できます。

PHP関数 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(); ?>

しかし私の見解によると、あなたのプロジェクトで登録が必須の場合はユーザーに尋ねる方が良いです。

 

With the PHP date function you will get the date time of server on which the site is located. The only way to get the user time is to use JavaScript.

But I suggest you to, if your site has registration required then the best way is to ask the user while to have registration as a compulsory field. You can list various time zones in the register page and save that in the database. After this, if the user logs in to the site then you can set the default time zone for that session as per the users’ selected time zone.

You can set any specific time zone using the PHP function date_default_timezone_set. This sets the specified time zone for users.

Basically the users’ time zone is goes to the client side, so we must use JavaScript for this.

Below is the script to get users’ time zone using PHP and 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(); ?> 

But as per my point of view, it’s better to ask to the users if registration is mandatory in your project.

</div
 
 
23
 
vote

IPアドレスを定義しないでください(したがってTimeZone) - NAT、プロキシ(ますます一般的な)、およびVPNSでは、IPアドレスは必ずしもユーザーの実際の場所を実際に反映させないためです。そのプロトコルを実行するサーバーが存在するサーバーが存在します。

米国のエリアコードがどのようにして電話ユーザを見つけるのにも有用ではなく、数多くの移植性の人気を与えられていない。

上記のIPアドレスおよび他の技術は、ユーザが調整/修正できるデフォルトを提案するに役立ちます。

 

Don't use the IP address to definitively determine location (and hence timezone)-- that's because with NAT, proxies (increasingly popular), and VPNs, IP addresses do not necessarily realistically reflect the user's actual location, but the location at which the servers implementing those protocols reside.

Similar to how US area codes are no longer useful for locating a telephone user, given the popularity of number portability.

IP address and other techniques shown above are useful for suggesting a default that the user can adjust/correct.

</div
 
 
22
 
vote

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>';

これは常に彼/彼女のコンピュータクロックに設定したタイムゾーンに基づいて時間を正しく表示します。誰にも何も尋ねて場所に保存する必要はありません、神に感謝します!

 

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; } 

Simply provide your times in Unix timestamp format to this function; JavaScript already knows the timezone of the user.

Like this:

PHP:

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

This will always show the times correctly based on the timezone the person has set on his/her computer clock. There is no need to ask anything to anyone and save it into places, thank god!

</div
 
 
 
 
21
 
vote

Easy、JavaScript getTimezoneOffset 機能を使用するだけです。

<事前> <コード> -new Date().getTimezoneOffset()/60;
 

Easy, just use the JavaScript getTimezoneOffset function like so:

-new Date().getTimezoneOffset()/60; 
</div
 
 
     
     
20
 
vote

すべての魔法が

のようです <事前> <コード> visitortime.getTimezoneOffset()

それはクールです、私はそれについて知りませんでした。 Internet Explorerなどで機能しますか?そこからJavaScriptをAjaxに使用できるはずです。私はおそらく自分でクッキールートを行くでしょう。

ユーザーがそれを変更することを許可する必要があります。私たちはジオロケーション( maxmind を介して)を使用して前にこれを実行することを試みました、そしてそれをする価値がないことを十分に悪化しました。だから私たちは彼らのプロフィールにそれをそれを設定し、それをまだ設定していないユーザーに通知を表示させるだけです。

 

All the magic seems to be in

visitortime.getTimezoneOffset() 

That's cool, I didn't know about that. Does it work in Internet Explorer etc? From there you should be able to use JavaScript to Ajax, set cookies whatever. I'd probably go the cookie route myself.

You'll need to allow the user to change it though. We tried to use geo-location (via maxmind) to do this a while ago, and it was wrong enough to make it not worth doing. So we just let the user set it in their profile, and show a notice to users who haven't set theirs yet.

</div
 
 
16
 
vote

これは、ASP.NET(VB.NET、C#)アプリケーションでローカライズされた時間を決定して使用する方法を説明する記事(ソースコード付き)です。

要するに、説明されているアプローチは、JavaScript getTimezoneOffset 関数に依存します。これは、セッションCookieに保存され、GMTと現地時間の間の時間値を調整するためにコード後ろで使用される値を返します。素敵なことは、ユーザーがタイムゾーンを指定する必要がないことです(コードは自動的には)。もっと関与しています(これが私が記事にリンクする理由です)が、提供されているコードはそれを本当に使いやすくします。私はあなたがPHPおよび他の言語にロジックを変換することができると思われます(ASP.NETを理解されている限り)。

 

Here is an article (with source code) that explains how to determine and use localized time in an ASP.NET (VB.NET, C#) application:

It's About Time

In short, the described approach relies on the JavaScript getTimezoneOffset function, which returns the value that is saved in the session cookie and used by code-behind to adjust time values between GMT and local time. The nice thing is that the user does not need to specify the time zone (the code does it automatically). There is more involved (this is why I link to the article), but provided code makes it really easy to use. I suspect that you can convert the logic to PHP and other languages (as long as you understand ASP.NET).

</div
 
 
       
       
15
 
vote

openid を使用している場合は、簡単な登録拡張は、認証されたユーザーにとって問題を解決します(TZから数字に変換する必要があります)。

別の選択肢は、ユーザーエージェントの国の嗜好からタイムゾーンを推測することです。これはやや粗い方法です(en-usのためには機能しません)が、良い近似値を作ります。

 

If you happen to be using OpenID for authentication, Simple Registration Extension would solve the problem for authenticated users (You'll need to convert from tz to numeric).

Another option would be to infer the time zone from the user agent's country preference. This is a somewhat crude method (won't work for en-US), but makes a good approximation.

</div
 
 
14
 
vote

JavaScriptとPHP:

で簡単です。

ユーザーが自分の内部時計やタイムゾーンを台無しにすることができますが、これまでのところ、オフセットを取得するための最良の方法は new Date().getTimezoneOffset(); です。それは非侵襲的です、頭痛を与えず、第三者に頼る必要性を排除します。

言う users は、UNIXタイムスタンプを格納するためのフィールド<コード> date_created int(13) を含みます。

クライアント<コード> 99887663 を想定して、 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'] ;

として受け取るとします。 <事前> <コード> users0

挿入/更新<コード> users1 。

DATE_CREATEDを取得するときは、次のようにタイムスタンプを変換できます。

<事前> <コード> users2

この例は、<コード> date_created column13 TIMESTAMPの挿入に関して、必要なニーズに合うことがあります。追加のタイムスタンプ、またはテーブルになると、TZO値の挿入を検討したい場合があります。将来の参照のためのユーザーテーブルに、またはセッションとしてまたはクッキーとして設定します。

p.S。しかし、ユーザーがタイムゾーンを移動して切り替える場合GMT + 4でログインし、GMT-1に高速を移動し、再度ログインします。最後のログインは将来的になるでしょう。

私は思う...私たちはあまり考えすぎる。

 

It is simple with JavaScript and PHP:

Even though the user can mess with his/her internal clock and/or timezone, the best way I found so far, to get the offset, remains new Date().getTimezoneOffset();. It's non-invasive, doesn't give head-aches and eliminates the need to rely on third parties.

Say I have a table, users, that contains a field date_created int(13), for storing Unix timestamps;

Assuming a client creates a new account, data is received by post, and I need to insert/update the date_created column with the client's Unix timestamp, not the server's.

Since the timezoneOffset is needed at the time of insert/update, it is passed as an extra $_POST element when the client submits the form, thus eliminating the need to store it in sessions and/or cookies, and no additional server hits either.

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; 

Say the server receives tzo as $_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); 

Insert/update date_created=$user_timestamp.

When retrieving the date_created, you can convert the timestamp like so:

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

Now, this example may fit one's needs, when it comes to inserting a first timestamp... When it comes to an additional timestamp, or table, you may want to consider inserting the tzo value into the users table for future reference, or setting it as session or as a cookie.

P.S. BUT what if the user travels and switches timezones. Logs in at GMT+4, travels fast to GMT-1 and logs in again. Last login would be in the future.

I think... we think too much.

</div
 
 
14
 
vote

monomet-time zone を使用してクライアントで実行でき、サーバに値を送信します。サンプル使用量:

<事前> <コード> users4
 

You could do it on the client with moment-timezone and send the value to server; sample usage:

> moment.tz.guess() "America/Asuncion" 
</div
 
 
   
   
12
 
vote

有効なTZデータベースの取得PHPのタイムゾーン名は2段階のプロセスです。

  1. JavaScriptを使用すると、 users5 から分単位のオフセットを数分で取得してください。ローカルタイムゾーンがUTCの背後にある場合、このオフセットは正とそれが先にある場合はマイナスになります。そのため、オフセットに反対の符号を追加する必要があります。

    <事前> <コード> date_created column16

    このオフセットをPHPに渡します。

  2. PHPでこのオフセットを TIMEZONE_NAME_FROM_ABBR 関数を持つ有効なタイムゾーン名に変換します。

    <事前> <コード> users7
  3. ブログ投稿を書いた: PHP でユーザータイムゾーンを検出する方法。デモが含まれています。

 

Getting a valid TZ Database timezone name in PHP is a two-step process:

  1. With JavaScript, get timezone offset in minutes through getTimezoneOffset. This offset will be positive if the local timezone is behind UTC and negative if it is ahead. So you must add an opposite sign to the offset.

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

    Pass this offset to PHP.

  2. In PHP convert this offset into a valid timezone name with timezone_name_from_abbr function.

    // 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> 

I've written a blog post on it: How to Detect User Timezone in PHP. It also contains a demo.

</div
 
 
 
 
10
 
vote

それを使う簡単な方法:

<事前> <コード> users8
 

A simple way to do it is by using:

new Date().getTimezoneOffset(); 
</div
 
 
   
   
9
 
vote

1つの可能なオプションは、 998877619 ヘッダーフィールドを使用することです。 "NOREFERRER"> RFC 7231 とタイムゾーンを含めることになっています。もちろん、その値が本当にクライアントのタイムゾーンであることは保証されていませんが、便利な出発点です。

 

One possible option is to use the Date header field, which is defined in RFC 7231 and is supposed to include the timezone. Of course, it is not guaranteed that the value is really the client's timezone, but it can be a convenient starting point.

</div
 
 
 
 
9
 
vote

これが私がそれをする方法です。これにより、PHPのデフォルトタイムゾーンがユーザーのローカルタイムゾーンに設定されます。すべてのページの上部に次のものを貼り付けるだけです。

<事前> <コード> date_created int(13)0
 

Here's how I do it. This will set the PHP default timezone to the user's local timezone. Just paste the following on the top of all your pages:

<?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 ?> 
</div
 
 
 
 
9
 
vote

この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']; ?>
 

Try this PHP code:

<?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']; ?> 
</div
 
 
0
 
vote

実際のHTMLコードまたは任意の user-agent 文字列のタイムゾーンを把握する方法はありませんが、あなたができることはJavaScriptを使用して基本的な機能を得ることです。

JavaScriptでまだコードする方法はわかりません

しかし、 9988777663 getTzimezoneOffset() 関数でJavaScriptを使用して、実際のタイムゾーンを取得することができます。 / P>

 

There's no such way to figure the timezone in the actual HTML code or any user-agent string, but what you can do is make a basic function getting it using JavaScript.

I don't know how to code with JavaScript yet so my function might take time to make.

However, you can try to get the actual timezone also using JavaScript with the getTzimezoneOffset() function in the Date section or simply new Date().getTimezoneOffset();.

</div
 
 

関連する質問

635  ユーザーのタイムゾーンを決定します  ( Determine a users timezone ) 
WebサーバーがWebページ内のユーザーのタイムゾーンを決定できるようにするための標準的な方法はありますか? おそらくHTTPヘッダーまたは<コード> Form7 string? ...

2  MongoDBは1日の時間帯の問題を節約します  ( Mongodb saves one day less time zone issue ) 
MM / DD / YYYYとしての形式で日付を投稿するが、MongoDBに保存されているとき、ISO()フォーマットを1日の数値で保存します。私は平均スタックを使って開発しています。 例:(角から)10/03/2016 MongoDB:ISOD...

2  QMLサポートは、タイムゾーンに基づいて異なるタイムゾーンに変換しますか?  ( Does qml support converting to different timezone based on timezoneid ) 
私は世界時計QMLプログラムを作っています。私は現在、特定の都市のTimeZone IDを入手するためにAPIを使用しています。 SOの場合、Delftの場合は <事前> <コード> TimezoneID = Europe/Amsterdam 都市名...

0  MySQL:タイムゾーンを調整した後、日に基づいてレコードを選択する方法を疑問に思う  ( Mysql wondering how to select records based on day after adjusting for timezon ) 
テーブル内の詳細に基づいて「現在利用可能」のレコードを選択したいと思います。私はそれが簡単であるべきだと思いますが、もちろん、私はそれを見ていません。私はここに尋ねることを尋ねることを願っています私は私の頭の質問に答えることができるかもしれません! 私は2つの...

0  IPロケーションに基づくJavaScriptのタイムゾーン調整  ( Timezone adjustment in javascript based on ip location ) 
<コード> offset = new Date().getTimezoneOffset(); これは、コンピュータの時計またはブラウザのタイムゾーンに基づいて、TimeZoneオフセットを与えます。 IPの場所に基づいてTimeZoneのオフセットを取得...

5  PostgreSQLでは、「タイムゾーン」でTimeZoneオフセットをアンテリア解除する方法  ( In postgresql how to un invert the timezone offsets with at time zone ) 
PostgreSQLのタイムゾーンの周りに頭を包み込もうとしています、そして私はこれを理解するようには思えません。 ESTはアメリカの「東標準時」で、通常 UTC-5 実施例1:ベーステスト <事前> <コード> select '08/31/2011 12...

3  ElasticsearchのDateTime - TimeZoneの処理方法  ( Datetime in elasticsearch how to handle timezone ) 
日付を含むフィールドに索引付けしようとします。 どのように私は別のタイムゾーンから日付を索引付けすることができますか? Elasticsearchフィールドを設定しました。 'requested_dt':{"type": "date"、 "format": ...

1  Oracle DBは、ただのオフセットではなく、TimeZone領域を返すことができますか?  ( Is oracle db able to return timezone region rather than just the offset ) 
は、TimeZone領域を返すことができるOracle DBです。ヨーロッパ/ロンドンはちょうどオフセットではなく?サーバーが存在する地域名を知りたいのですが。 デュアルからSystimestamp PARAMを選択します。日付、時刻、およびオフセット: <事...

0  Moshiと同時にタイムスタンプとタイムゾーンをオフセットする方法  ( How to parse time stamp and time zone offset simultaneously with moshi ) 
json-api応答には、次のプロパティが含まれています。 <事前> <コード> created_at_timestamp: 1565979486, timezone: "+01:00", moshi と threetenbp タイムスタンプを解析し...

0  iPligence Proの珍しいタイムゾーン  ( Unusual time zones in ipligence pro ) 
IPアドレスに基づくユーザータイムゾーンを取得する。ここでは、珍しいタイムゾーンオフセットがいくつかあります。下記のに記載されています EST + 1 PST-2 PST-1 GMT + 12.75 私はまったく上記の上にあるものがわか...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有