사용자의 시간대 결정
웹 서버에서 웹 페이지 내에서 사용자의 시간대를 결정할 수 있는 표준 방법이 있습니까?
의 할 수 .user-agent★★★★★★★★★★★★★★★★★?
-new Date().getTimezoneOffset()/60;
법getTimezoneOffset()GMT를 사용합니다.GMT-8을 480으로 설정했습니다.
이것을 몇 시간으로 나누려면 60으로 나누세요.또한 이 부호는 필요한 것과 반대입니다. GMT와 GMT의 오프셋을 계산하는 것이지 GMT와의 오프셋을 계산하는 것이 아닙니다.이 문제를 해결하려면 -1을 곱하기만 하면 됩니다.
또한 w3school은 다음과 같이 말합니다.
서머타임이 사용되고 있기 때문에 반환되는 값은 상수가 아닙니다.
지금까지 본 시간대(==표준?) 중 가장 인기 있는 방법은 사용자에게 직접 물어보는 것입니다.웹 사이트에서 구독이 필요한 경우 사용자의 프로필 데이터에 저장할 수 있습니다.anon 사용자의 경우 날짜는 UTC 또는 GMT 등으로 표시될 수 있습니다.
난 똑똑한 사람이 되려는 게 아니야.다만 때로는 프로그래밍 컨텍스트를 벗어나서 더 나은 해결책이 나올 수 있는 문제가 있습니다.
클라이언트 타임존을 보고하는HTTP 헤더는 아직 없지만 HTTP 사양에 포함할 것을 권장합니다.
저라면 아마 클라이언트 사이드 JavaScript를 사용하여 타임존을 가져와 Ajax를 사용하여 서버에 제출하려고 할 것입니다.
먼저 JavaScript에서 시간대 검출이 불완전하다는 것을 이해하십시오.특정 날짜 및 시간에 대한 로컬 시간대 오프셋은 다음을 사용하여 얻을 수 있습니다.getTimezoneOffset의 Date오브젝트, 하지만 IANA의 완전한 표준 시간대와는 다릅니다.America/Los_Angeles.
사용할 수 있는 옵션은 다음과 같습니다.
- 대부분의 최신 브라우저는 ECMAScript Internationalization API 구현에서 IANA 타임존을 지원하므로 다음과 같은 작업을 수행할 수 있습니다.
const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;
console.log(tzid);
그 결과 코드가 실행되고 있는 컴퓨터의 IANA 시간대 설정을 포함하는 문자열이 생성됩니다.
지원되는 환경은 [Intl Compatibility]테이블에 기재되어 있습니다.를 전개합니다.DateTimeFormat를 참조해 .「 」라고 하는 이름의 해 주세요.resolvedOptions().timeZone defaults to the host environment.
Luxon과 같은 일부 라이브러리는 이 API를 사용하여 다음과 같은 함수를 통해 시간대를 결정합니다.
luxon.Settings.defaultZoneName.오래된 웹 브라우저 등 광범위한 환경을 지원해야 하는 경우 라이브러리를 사용하여 시간대를 추측할 수 있습니다.이들은 먼저 이 기능을 사용하여
Intl수 및 할 수 합니다.getTimezoneOffset의 function의Date결과를 사용하여 내부 데이터 세트에서 적절한 시간대를 선택합니다.JstimezoneDetect와 모멘트타임존 모두 이 기능을 가지고 있습니다.
// using jsTimeZoneDetect var tzid = jstz.determine().name(); // using moment-timezone var tzid = moment.tz.guess();두 경우 모두 결과는 추측으로만 생각할 수 있습니다.대부분의 경우 추측이 맞을 수 있지만, 모든 것이 맞는 것은 아니다.
또한 이러한 라이브러리는 많은 오래된 JavaScript 구현이 로컬 시간대에 대한 현재의 서머타임 규칙만 인식하고 있다는 사실을 상쇄하기 위해 정기적으로 업데이트해야 합니다.자세한 것은 이쪽입니다.
최종적으로는 사용자에게 시간대를 실제로 물어보는 것이 더 나은 방법입니다.변경할 수 있는 설정을 제공합니다.위의 옵션 중 하나를 사용하여 기본 설정을 선택할 수 있지만, 앱에서 기본 설정을 벗어나지 않도록 하십시오.
또, 유저의 컴퓨터의 타임 존 설정에 전혀 의존하지 않는 전혀 다른 어프로치도 있습니다.대신 위도 및 경도 좌표를 수집할 수 있는 경우 다음 방법 중 하나를 사용하여 해당 좌표를 표준 시간대로 확인할 수 있습니다.이 기능은 모바일 기기에서 잘 작동합니다.
JavaScript는 클라이언트의 현지 시간을 얻는 가장 쉬운 방법입니다.XMLHttpRequest를 사용하여 로컬 시간을 반환하고 실패 시 IP 주소에 따라 검출된 시간대로 폴백하는 것이 좋습니다.
지리정보에 관한 한 MaxMind GeoIP를 여러 프로젝트에서 사용했는데, 타임존 데이터를 제공할지는 모르겠지만 잘 작동합니다.이는 사용자가 지불하는 서비스로, 매달 데이터베이스 업데이트를 제공합니다.이들은 여러 웹 언어로 된 래퍼를 제공합니다.
다음은 브라우저가 속한 시간대를 결정하는 강력한 JavaScript 솔루션입니다.
>>> var timezone = jstz.determine();
>>> timezone.name();
"Europe/London"
https://github.com/pellepim/jstimezonedetect
여기 좀 더 완벽한 방법이 있습니다.
- 사용자의 시간대 오프셋을 가져옵니다.
- 서머타임 경계에서 며칠간 테스트하여 서머타임을 사용하는 구역에 있는지 확인합니다.
발췌는 다음과 같습니다.
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;
}
Unkwntech의 어프로치를 사용하여 jQuery와 PHP를 사용하여 함수를 작성했습니다.이것은 테스트 완료로 동작합니다.
타임존을 변수로 하는 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을 실제 도메인으로 변경해야 합니다.
마지막으로 한가지.당신은 아마 도대체 무슨 시간대인지 궁금할 것이다.php는 다음과 같습니다. (타임존이라는 새로운 파일을 만듭니다.)php 를 지정해 주세요).
<?php
session_start();
$_SESSION['time'] = $_GET['time'];
?>
정상적으로 동작하면 먼저 페이지를 로드하고 JavaScript를 실행하여 페이지를 새로고침합니다.그러면 $timezone 변수를 읽고 자유롭게 사용할 수 있습니다.현재 UTC/GMT 시간대 오프셋(GMT -7) 또는 현재 시간대를 반환합니다.
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-timezones/using-user-timezone/에서 다운로드 가능
아직 시간대를 알 수 있는 자세한 답변을 보지 못했습니다.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
PHP the the 시 with 。date함수는 사이트가 위치한 서버의 날짜 시간을 가져옵니다.자바스크립트
단, 사이트에 등록이 필요한 경우 필수 필드로 등록하는 동안 사용자에게 문의하는 것이 가장 좋습니다.등록 페이지에 다양한 시간대를 나열하고 데이터베이스에 저장할 수 있습니다.그 후 사용자가 사이트에 로그인하면 해당 세션의 기본 시간대를 사용자가 선택한 시간대로 설정할 수 있습니다.
함수 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();
?>
하지만 제 견해로는 프로젝트에 등록이 필수인지 사용자에게 물어보는 것이 좋습니다.
IP 주소를 사용하여 위치(즉, 표준 시간대)를 결정하지 마십시오. NAT, 프록시(인기 증가) 및 VPN에서는 IP 주소가 사용자의 실제 위치를 반영하는 것이 아니라 이러한 프로토콜을 구현하는 서버가 있는 위치를 현실적으로 반영하기 때문입니다.
번호이동성이 널리 보급되어 있기 때문에 US 지역번호가 전화 사용자의 위치를 특정하는 데 더 이상 유용하지 않은 것과 유사합니다.
위에 나타낸 IP 주소 및 기타 기술은 사용자가 조정/수정할 수 있는 기본값을 제안할 때 유용합니다.
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를 하면 getTimezoneOffset뭇매를 맞다
-new Date().getTimezoneOffset()/60;
모든 마법이 깃든 것 같아
visitortime.getTimezoneOffset()
다행이네요, 저는 몰랐습니다.Internet Explorer 등에서도 동작합니까?거기에서 Ajax에 JavaScript를 사용할 수 있고 cookie를 설정할 수 있습니다.아마 내가 직접 쿠키 루트를 갈 거야.
사용자가 변경할 수 있도록 허용해야 합니다.위치를 사용하려고 .maxmind이 일을 할 가치가 없게 만들 정도로 잘못되었다.따라서 사용자가 프로파일로 설정할 수 있도록 하고 아직 설정하지 않은 사용자에게 알림을 표시합니다.
Open을 사용하는 경우인증을 위한 ID Simple Registration Extension은 인증된 사용자의 문제를 해결합니다(tz에서 숫자로 변환해야 합니다).
다른 옵션은 사용자 에이전트의 국가별 선호도에서 시간대를 추론하는 것입니다.이것은 다소 조잡한 방법(en-US에는 적용되지 않지만)이지만 근사치가 좋습니다.
ASP의 현지화 시간을 결정하고 사용하는 방법을 설명하는 문서(소스 코드 포함)를 다음에 나타냅니다.NET(VB)NET, C#) 어플리케이션:
이 , JavaScript, JavaScript에 합니다.getTimezoneOffsetfunction: 세션쿠키에 저장되어 GMT와 현지시간 사이의 시간 값을 조정하기 위해 코드 배후에 의해 사용되는 값을 반환합니다.좋은 점은 사용자가 시간대를 지정할 필요가 없다는 것입니다(코드에 의해 자동으로 지정됩니다).(이 때문에 기사에 링크하고 있습니다만) 코드를 제공받으면 매우 사용하기 쉬워집니다.로직은 PHP나 다른 언어로 변환할 수 있을 것 같습니다(ASP를 이해한다면). ★★★★
JavaScript와 PHP를 사용하면 간단합니다.
할 수 의 방법은 입니다.new Date().getTimezoneOffset();비침습적이고 두통을 일으키지 않으며 제3자에게 의존할 필요가 없습니다.
를 들어 '고 하면 됩니다.users 필드, 필드, 필드, 필드, 필드, 필드, 필드, 필드, 필드, 필드.date_created int(13) Unix , Unix 「」를 참조해 주세요.
의 「」를 전제로 하고 .creates a new account에 의해 post, , and I need to , 그리고 나는 할 필요가 있다.insert/update그 thedate_created column클라이언트 유닉스 타임스탬프가 아닌 클라이언트 타임스탬프입니다.서버의 타임 스탬프가 아닌 클라이언트의 Unix 타임스탬프가 표시됩니다.
timezone Offset은 삽입/업데이트 시 필요하므로 클라이언트가 폼을 전송할 때 추가 $_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;
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);
입 신/업데이트 삽입/d)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
제 이 예는 이 입 는 예 용 한 니 습 구 있 다수 now, a,적 example may' ones fit needs할요사합 this it에관 tofirst★★★★★★★★★★★★★★…추가 타임스탬프 또는 테이블에 대해서는 나중에 참조할 수 있도록 tzo 값을 사용자 테이블에 삽입하거나 세션 또는 쿠키로 설정하는 것을 고려할 수 있습니다.
추신. 하지만 사용자가 이동해서 시간대를 바꾸면 어떻게 될까요?GMT+4로 로그인하여 GMT-1로 빠르게 이동하고 다시 로그인합니다.마지막 로그인은 미래입니다.
제 생각에는...우리는 너무 많이 생각한다.
클라이언트 상에서 moment-timezone을 사용하여 값을 서버로 전송할 수 있습니다.사용 예:
> moment.tz.guess()
"America/Asuncion"
PHP에서 유효한 TZ 데이터베이스 시간대 이름을 얻는 과정은 두 단계로 이루어집니다.
JavaScript를하면 JavaScript를 통해 시간대 을 분 수 .
getTimezoneOffset. 이 이 오프셋은 로컬 시간대가 UTC보다 늦으면 양수, 앞에 있으면 음수입니다.따라서 오프셋에 반대 기호를 추가해야 합니다.var timezone_offset_minutes = new Date().getTimezoneOffset(); timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes;이 오프셋을 PHP에 전달합니다.
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에서 사용자 타임존을 검출하는 방법.데모도 포함되어 있습니다.
다음 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'];
?>
간단한 방법은 다음과 같습니다.
new Date().getTimezoneOffset();
내가 하는 방법은 이렇다.그러면 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
?>
한 옵션 중 하나는 ""를 입니다.DateRFC 7231에 정의되어 있으며 타임존이 포함되어 있어야 합니다.물론 이 값이 실제로 클라이언트의 표준 시간대라는 보장은 없지만, 편리한 시작점이 될 수 있습니다.
브라우저에서는 몇 가지 방법으로 시간대를 확인할 수 있습니다.브라우저에서 사용할 수 있고 지원되는 표준 기능이 있다면 사용해야 합니다.다음은 동일한 정보를 다른 형식으로 가져오는 세 가지 방법입니다.특정 가정이나 하드 코드화된 구역 목록을 기반으로 추측하는 비표준 솔루션은 사용하지 마십시오. 단, 다른 조치를 취할 수 없는 경우에는 도움이 될 수 있습니다.
이 정보를 얻으면 이 정보를 비표준 요청 헤더로 서버에 전달하고 서버에서 사용할 수 있습니다.타임존 오프셋이 필요한 경우 헤더 또는 요청 페이로드 내의 서버에 전달할 수도 있습니다.이 페이로드에서는 dateObj.getTimezoneOffset()을 사용하여 취득할 수 있습니다.
- Intl API를 사용하여 Olson 형식을 가져옵니다(표준 및 권장 방법).일부 브라우저에서는 지원되지 않습니다.브라우저 지원에 대한 자세한 내용은 이 링크를 참조하십시오.이 API에서는 아시아/콜카타, 아메리카/뉴욕 등 Olson 형식으로 타임존을 가져옵니다.
Intl.DateTimeFormat().resolvedOptions().timeZone
- 날짜 개체를 사용하여 인도 표준시, 동부 표준시 등과 같은 긴 형식을 가져옵니다.이것은 모든 브라우저에서 지원됩니다.
let dateObj = new Date(2021, 11, 25, 09, 30, 00);
//then
dateObj.toString()
//yields
Sat Dec 25 2021 09:30:00 GMT+0530 (India Standard Time) //I am located in India (IST)
문자열에는 긴 형식과 짧은 형식의 시간대 정보가 포함되어 있습니다.이제 regex를 사용하여 다음 정보를 가져올 수 있습니다.
let longZoneRegex = /\((.+)\)/;
dateObj.toString().match(longZoneRegex);
//yields
['(India Standard Time)', 'India Standard Time', index: 34, input: 'Sat Dec 25 2021 09:30:00 GMT+0530 (India Standard Time)', groups: undefined]
//Note that output is an array so use output[1] to get the timezone name.
- 날짜 개체를 사용하여 GMT+0530, GMT-0500 등의 단축 형식을 가져옵니다.이것은 모든 브라우저에서 지원됩니다.
마찬가지로 쇼트 포맷도 사용할 수 있습니다.
let shortZoneRegex = /GMT[+-]\d{1,4}/;
dateObj.toString().match(shortZoneRegex);
//yields
['GMT+0530', index: 25, input: 'Sat Dec 25 2021 09:30:00 GMT+0530 (India Standard Time)', groups: undefined]
//Note that output is an array so use output[0] to get the timezone name.
HTML 은 없습니다.user-agent문자열은 JavaScript를 사용하여 얻을 수 있는 기본 함수를 만드는 것입니다.
JavaScript로 코드화하는 방법을 아직 모르기 때문에 함수는 만드는 데 시간이 걸릴 수 있습니다.
실제 할 수도 .getTzimezoneOffset()Date 또는 단순하게 " " " "new Date().getTimezoneOffset();.
는 ★★★★★★★★★★★★★★★★★★★★★★★★」@Matt Johnson-PintsCanIuse 검색 결과 현재 널리 채택되고 있는 것으로 나타났습니다.
https://caniuse.com/?search=Intl.DateTimeFormat().resolvedOptions().timeZone
다만, 과제 중 하나는 타임 존을 알고 싶은 이유를 고려하는 것입니다.왜냐하면 대부분의 사람들이 놓치고 있는 것 중 하나는 그들이 변할 수 있다는 것이기 때문입니다!이전에 노트북을 데이터베이스에 저장했다면 사용자가 노트북을 가지고 유럽에서 미국으로 이동하면 해당 시간대가 올바르지 않게 됩니다(사용자가 실제로 장치 시간대를 업데이트하지 않더라도).이것은, 또, 의 문제이기도 합니다.@Mads Kristiansen사용자가 이동하기 때문에 답변도 가능합니다.기존대로는 신뢰할 수 없습니다.
예를 들어 Linux 노트북은 "자동 타임존"이 꺼져 있습니다.시간이 업데이트 될 수도 있지만 내 시간대는 그렇지 않아.
그래서 저는 그 답이 무엇 때문에 필요한가라고 생각합니다.클라이언트 측에서는 확실히 그것을 확인하는 방법이 쉬워 보이지만 클라이언트 측과 서버 측 코드는 모두 사용자의 시간대 갱신 또는 자동 갱신 중 하나에 따라 달라집니다.물론 내가 틀릴 수도 있다.
언급URL : https://stackoverflow.com/questions/13/determine-a-users-timezone
'source' 카테고리의 다른 글
| Select Unique와 Select Distinguish의 차이 (0) | 2023.04.08 |
|---|---|
| PowerShell에서 MD5 체크섬을 가져오는 방법 (0) | 2023.04.08 |
| Windows Batch File에서 웹 페이지 열기 (0) | 2023.04.08 |
| 덮어쓰지 않고 파일 복사 (0) | 2023.04.08 |
| 실행 파일에서 Windows 서비스 생성 (0) | 2023.04.08 |