web-dev-qa-db-ja.com

特定のタイムゾーンの時間を取得する

JavaScript Dateクラスを使用しており、getDate()メソッドを使用して現在の日付を取得しようとしています。しかし、明らかにそれはシステムの日付と時刻を読み込んでいます。私はインドからコードを実行していますが、同じ方法を使用して英国の日付と時刻を取得したいです。どうやってやるの ?

57
aslamdoctor

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

から取得: ローカル時間を別の時間に変換

52

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これらのブロックは、タイムゾーンオフセットを取得するなど、失敗した場合の代替案を見つけますサーバーから。

33
transistor09

これを行う最良の方法は、次のように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'

21
Chris

これは##を取得する正しい方法です

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());
        }
9
Joy Chowdhury

getUTCDate() および関連するgetUTC...()メソッドを使用して、UTC時間に基づいて時間にアクセスし、変換することができます。

必要に応じて、 valueOf() を使用できます。これは、Unixエポック以降のUTCでの秒数を返し、それで動作しますが、もっと複雑になるでしょう。

5
kevinji

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

正しい日付と時刻を持っていることが本当に重要な場合;時刻を返すサービス(もちろん、UTCで実行している)をサーバー上に保持することをお勧めします。その後、クライアントで新しい日付を作成し、値を比較し、必要に応じてすべての日付をサーバー時間からのオフセットで調整できます。

どうしてですか?バグレポートが2日間メールで送られていることに気付くまで、サーバーログでエラーメッセージを見つけることができなかったため、再現が困難なバグレポートがありましたafter受け取った。 おそらく UTCタイムスタンプの送信時にタイムゾーン変換を正しく処理するためにブラウザーを信頼できますが、システムクロックが正しく設定されていることをユーザーが信頼できないことは明らかです。 (ユーザーのタイムゾーンが正しく設定されていない場合、実際の解決策はありません。現在のサーバー時間を「ローカル」時間で印刷する以外に)

0