JavaScript Date
クラスを使用しており、getDate()
メソッドを使用して現在の日付を取得しようとしています。しかし、明らかにそれはシステムの日付と時刻を読み込んでいます。私はインドからコードを実行していますが、同じ方法を使用して英国の日付と時刻を取得したいです。どうやってやるの ?
UTCオフセットがわかっている場合は、次の関数を使用してそれを渡して時刻を取得できます。
function calcTime(city, offset) {
// create Date object for current location
var d = new Date();
// convert to msec
// subtract local time zone offset
// get UTC time in msec
var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
// create new Date object for different city
// using supplied offset
var nd = new Date(utc + (3600000*offset));
// return time as a string
return "The local time for city"+ city +" is "+ nd.toLocaleString();
}
alert(calcTime('Bombay', '+5.5'));
から取得: ローカル時間を別の時間に変換
Intl.DateTimeFormat
を使用できます。
var options = {
timeZone: 'Europe/London',
year: 'numeric', month: 'numeric', day: 'numeric',
hour: 'numeric', minute: 'numeric', second: 'numeric',
},
formatter = new Intl.DateTimeFormat([], options)
formatter.format(new Date())
または、一括ではなく1回だけフォーマットする場合は、 Date.prototype.toLocaleDateString()
を使用します。
(new Date()).toLocaleString([], options)
残念ながら、ブラウザはUTC以外のタイムゾーンを理解するためにnotが必要なので、try
これらのブロックは、タイムゾーンオフセットを取得するなど、失敗した場合の代替案を見つけますサーバーから。
これを行う最良の方法は、次のようにgetLocaleStringを使用することです。
日付オブジェクトを作成します。
date = new Date(0)
ベルリンにいる場合、これは次の文字列に変換する必要があります。
1970年1月1日(木)01:00:00 GMT + 0100(CET)
アテネの時間を取得します。
date.toLocaleString('de-DE', {hour: '2-digit', hour12: false, timeZone: 'Europe/Athens' })
'02'
上海での時間を取得します。
date.toLocaleString('de-DE', {hour: '2-digit', hour12: false, timeZone: 'Asia/Shanghai' })
'08'
function getTime(offset)
{
var d = new Date();
localTime = d.getTime();
localOffset = d.getTimezoneOffset() * 60000;
// obtain UTC time in msec
utc = localTime + localOffset;
// create new Date object for different city
// using supplied offset
var nd = new Date(utc + (3600000*offset));
//nd = 3600000 + nd;
utc = new Date(utc);
// return time as a string
$("#local").html(nd.toLocaleString());
$("#utc").html(utc.toLocaleString());
}
getUTCDate()
および関連するgetUTC...()
メソッドを使用して、UTC時間に基づいて時間にアクセスし、変換することができます。
必要に応じて、 valueOf()
を使用できます。これは、Unixエポック以降のUTCでの秒数を返し、それで動作しますが、もっと複雑になるでしょう。
Date.getTimezoneOffset()
GetTimezoneOffset()メソッドは、グリニッジ標準時(GMT)と現地時間の時差を分単位で返します。
たとえば、タイムゾーンがGMT + 2の場合、-120が返されます。
注:このメソッドは、常にDateオブジェクトと組み合わせて使用されます。
var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
document.write("The local time zone is: GMT " + gmtHours);
//output:The local time zone is: GMT 11
正しい日付と時刻を持っていることが本当に重要な場合;時刻を返すサービス(もちろん、UTCで実行している)をサーバー上に保持することをお勧めします。その後、クライアントで新しい日付を作成し、値を比較し、必要に応じてすべての日付をサーバー時間からのオフセットで調整できます。
どうしてですか?バグレポートが2日間メールで送られていることに気付くまで、サーバーログでエラーメッセージを見つけることができなかったため、再現が困難なバグレポートがありましたafter受け取った。 おそらく UTCタイムスタンプの送信時にタイムゾーン変換を正しく処理するためにブラウザーを信頼できますが、システムクロックが正しく設定されていることをユーザーが信頼できないことは明らかです。 (ユーザーのタイムゾーンが正しく設定されていない場合、実際の解決策はありません。現在のサーバー時間を「ローカル」時間で印刷する以外に)