new Date().getTimezoneOffset()*(-1);
このJS関数は、マシンのUTCタイムゾーンを分単位で返します。同じことをするPHP関数はありますか?
ありがとうございました..
new Date().getTimezoneOffset()*(-1);
このJS関数は、マシンのUTCタイムゾーンを分単位で返します。同じことをするPHP関数はありますか?
ありがとうございました..
サーバー側であるPHPは、クライアントが送信したもののみを読み取ることができます。ユーザー(またはブラウザーなどのユーザーエージェント)から明示的に通知されない限り、ユーザーのタイムゾーンを通知することはできません。
推測する方法はいくつかあります。ロケーションサービスを呼び出すことで、IPを検索し、IPロケーションに基づいてタイムゾーンを推測できます(時間がかかり、誤った結果を返す可能性があるため、お勧めしません)。
また、JavaScriptにajax呼び出しを行わせて、サーバーに値を通知することもできますDate().getTimezoneOffset()
。個人的にはこのルートを利用します。
<?php // RAY_easy_client_time.php
error_reporting(E_ALL);
// USE JAVASCRIPT TO GET THE CLIENT TIME AND COMPUTE THE OFFSET FROM THE SERVER TIME
// LOCATION OF THE SERVER - COULD BE ANYWHERE
date_default_timezone_set('America/Denver');
// DIFFERENCE OF SERVER TIME FROM UTC
$server_offset_seconds = date('Z');
// WHEN THE FORM IS SUBMITTED
if (!empty($_POST))
{
// JAVASCRIPT TELLS US THE CLIENT TIME OFFSET FROM GMT / UTC
$client_offset_minutes = $_POST["date_O"];
$client_offset_seconds = $client_offset_minutes * 60;
// THE TIME WE WANT AT THE CLIENT LOCATION
$client_timestring = 'TODAY 7:00AM';
// MAKE THE COMPUTATIONS, INCORPORATING THE OFFSET FROM GMT
$client_timestamp = strtotime($client_timestring) + $client_offset_seconds;
$server_timestamp = $client_timestamp + $server_offset_seconds;
$server_timestring = date('l, F j, Y \a\t g:i a', $server_timestamp);
echo "<br/>ACCORDING TO THE VALUE FROM PHP date Z";
echo "<br/>SERVER IS LOCATED $server_offset_seconds SECONDS FROM UTC";
echo "<br/>";
echo "<br/>ACCORDING TO THE VALUE FROM JS dateObject.getTimezoneOffset()";
echo "<br/>CLIENT IS LOCATED $client_offset_minutes MINUTES FROM UTC";
echo "<br/>";
echo "<br/>WHEN IT IS '$client_timestring' AT THE CLIENT, IT IS '$server_timestring' IN " . date_default_timezone_get();
}
// END OF PHP - USE HTML AND JS TO CREATE THE FORM
echo PHP_EOL; ?>
<form method="post">
<input name="date_O" id="dateTime_O" type="hidden" />
<input type="submit" value="CHECK CLIENT DATETIME" />
</form>
<!-- NOTE THIS WILL GIVE YOU THE VALUES AT PAGE-LOAD TIME, NOT AT SUBMIT TIME -->
<!-- MAN PAGE REF: http://www.w3schools.com/jsref/jsref_obj_date.asp -->
<script type="text/javascript">
var dateObject = new Date();
document.getElementById("dateTime_O").value = dateObject.getTimezoneOffset();
</script>