JavaScriptで日付を別のタイムゾーンに変換する


336

あるタイムゾーンの日付を別のタイムゾーンに変換する関数を探しています。

2つのパラメーターが必要です。

  • 日付(「2012/04/10 10:10:30 +0000」の形式)
  • タイムゾーン文字列( "Asia / Jakarta")

タイムゾーン文字列は、http://en.wikipedia.org/wiki/Zone.tabで説明されています

これを行う簡単な方法はありますか?


1
特定の都市のUTCオフセットを見つけます。stackoverflow.com/questions/3002910/…–
ブランドンブーン、

3
UTCオフセットだけでなく、夏時間/夏時間も計算したいと思います。したがって、時間が正しく戻ります。
Rizky Ramadhan 2012



unix dateコマンドを使用したタイムゾーンのオフセット:date +%s -d '1 Jan 1970'
anthony

回答:


190

var aestTime = new Date().toLocaleString("en-US", {timeZone: "Australia/Brisbane"});
console.log('AEST time: '+ (new Date(aestTime)).toISOString())

var asiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Shanghai"});
console.log('Asia time: '+ (new Date(asiaTime)).toISOString())

var usaTime = new Date().toLocaleString("en-US", {timeZone: "America/New_York"});
console.log('USA time: '+ (new Date(usaTime)).toISOString())

var indiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Kolkata"});
console.log('India time: '+ (new Date(indiaTime)).toISOString())

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString


1
これは正解であり、ライブラリを使用しない標準的な方法であるため、これに対する回答を変更しました。
Rizky Ramadhan

5
MDNのドキュメントには、すべての実装で認識される必要がある唯一のタイムゾーンがUTCであることが明確に記載されています。(stackoverflow.com/questions/10087819/…)IE11の[Run code snippet]ボタンをクリックするとエラーが発生します。
ビビアン川

1
現在すべてのブラウザで機能する実装を探している人がいるなら、彼らはそれ自身の短所で以下の答えを試すことができます...
Rizky Ramadhan

14
この答えは、タイムゾーンをtoLocaleStringに正しく渡すことを示していますが、その文字列をDateコンストラクタに渡すことを非常に誤って示しています。それは問題を求めています。日付文字列パーサーはロケール固有の形式を受け入れる必要はなく、入力はローカルタイムゾーンであるかのように扱われます。それをしないでください。最初のtoLocalString呼び出しからの文字列出力を使用するだけです。
Matt Johnson-Pint

4
@MattJohnsonでは、getHour()などのメソッドを使用できません
Ali Padida

131

moment.jsのユーザー、あなたが今使用することができた瞬間、タイムゾーンを。これを使用すると、関数は次のようになります。

function toTimeZone(time, zone) {
    var format = 'YYYY/MM/DD HH:mm:ss ZZ';
    return moment(time, format).tz(zone).format(format);
}

3
新しいタイムゾーンを追加する方法がわかりませんでした。ドキュメントは役に立ちませんでした。私は単なるプログラマーであり、時間の専門家ではありません!
Parziphal

8
ここでの問題は、これが新しいDateオブジェクトを返さず、文字列を返すことです。それがあなたが望むものであれば、もちろんそれは良いことです。
nickdnk 2015年

2
「return moment(time).tz(zone).format(format);」ではありませんか ?コードで指定したものに「無効な日付」エラーが含まれています。
Tarek、2016年

1
ブラウザにMoment.jsをロードすることはできません。とても悲しい:(
Daniil Shevelev

4
tzデータベースのコピーを使用してブラウザに180Kを送信することに不満があり、古いブラウザの現在のタイムゾーンの低下に耐えられる場合は、を使用して@lambinatorの回答を試してくださいDate.prototype.toLocaleString
PeterV.Mørch2017

92

恥知らずに盗まれたもの:http : //www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329

/** 
 * function to calculate local time
 * in a different city
 * given the city's UTC offset
 */
function calcTime(city, offset) {

    // create Date object for current location
    var d = new Date();

    // convert to msec
    // add 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 in " + city + " is " + nd.toLocaleString();
}

この関数は、都市/国の名前とオフセット値を提供してタイムゾーン値を計算するのに役立ちます


4
いいですが、渡された都市に基づいてオフセットを調べたいと思います。
Brandon Boone

117
これは、夏時間の変更を考慮していません。
Robotbugs 2013年

12
質問には答えませんが私のものに答えます(+1)
Reign.85

その「3600000」は文字通り私を殺した!入力では、tzは時間単位で指定する必要があります。そして、それは差し引かれるべきです。したがって、次を渡す場合:var d = new Date calcTime( ''、d.getTimezoneOffset()/ 60); それは同じ時間を返すはずです。
Praveen

1
この回答は非常に古く、特にtoLocaleStringを使用している部分は削除する必要があります。これは、別のタイムゾーンにシフトされたときにホストのタイムゾーンを報告する可能性があります。さまざまなオフセットのタイムスタンプを手動で作成するより良い方法があります。
RobG 2018

89

Safariを除くほとんどのデスクトップ(モバイルではない)ブラウザーは、引数付きのtoLocaleString関数をサポートしています。古いブラウザーは通常、引数を無視します。

new Date().toLocaleString('en-US', { timeZone: 'Asia/Jakarta' })

4
:( Firefoxとエッジに失敗する
サイムVIDAS

10
これはFFとIE11 +ではハードに失敗するため、別の解決策を見つける必要があります。
jdavid.net 2015

2
エッジとクロムはそれが好きでした:)
Suhail Mumtaz Awan

6
Chrome v59とFirefoxデスクトップv54、Android v59のChome、iOS 10.3のSafari 10で今すぐ機能しました。IE10では動作しませんでした。Date.prototype.toLocaleString()のMDNの説明がありtoLocaleStringSupportsLocales()ますが、確実にサポートするためにチェックすることができます実装を。
PeterV.Mørch、2017

1
node.js v8.7.0でのテストに成功
Heinrich Ulbricht

56

わかった!

私はtimezone-jsを使用しています。これはコードです:

var dt = new timezoneJS.Date("2012/04/10 10:10:30 +0000", 'Europe/London');
dt.setTimezone("Asia/Jakarta");

console.debug(dt); //return formatted date-time in asia/jakarta

90
私はこれに反対票を投じなければなりません。timezone-jsはDSTをサポートしておらず、readmeでそれを宣伝していません。参照:github.com/mde/timezone-js/issues/51、および提出済みで修正されていないように見える他の多くの問題。

@nusええ、しかしクライアントサイドのタイムゾーン/日付管理のためのソリューションは本当にありません... jquery ui datepickerは私のために私を狂わせてきました。歓声
ルーカス

2
@ Marabunta、moment-timezone(Brian Di Palmaによる回答)がDSTをサポートしているように見えますgithub.com/moment/moment-timezone/issues/21
welldan97

2
TimezoneJSは使用しないでください。DSTの変更に関するバグがあります。
matf 2016年

17

大きなライブラリをインポートしたくない場合は、Intl.DateTimeFormatを使用してDateオブジェクトを別のタイムゾーンに変換できます。

// Specifying timeZone is what causes the conversion, the rest is just formatting
const options = {
  year: '2-digit', month: '2-digit', day: '2-digit',
  hour: '2-digit', minute: '2-digit', second: '2-digit',
  timeZone: 'Asia/Jakarta',
  timeZoneName: 'short'
}
const formater = new Intl.DateTimeFormat('sv-SE', options)
const startingDate = new Date("2012/04/10 10:10:30 +0000")

const dateInNewTimezone = formater.format(startingDate) 
console.log(dateInNewTimezone) // 12-04-10 17:10:30 GMT+7

オフセット、夏時間、および過去の変更はあなたのために処理されます。


IE10 +はタイムゾーンのIntl APIをサポートしていません。moment.github.io/luxon/docs/manual/matrix.html
クロエ

これが実際の最良の答えです。toLocaleString一貫性のない実装があり、これはIE11以降で機能します。
dlsso

参考:これは実際にはIE11では機能しません。少なくともWindows 8.1では機能しません。formatterオブジェクトを作成しようとすると、次のエラーが発生します: `` `'timeZone'のオプション値 'Asia / Jakarta'が有効範囲外です。予想:['UTC'] `` `
veddermatic

フォーマッタの最終結果を再度Dateオブジェクトに変換する方法はありますか?
mding5692

10

とった !

表示されている日付を強制したい=サーバーの日付、ローカル設定(UTC)は重要ではありません。

私のサーバーはGMT-6->新しいDate()。getTimezoneOffset()= 360です。

myTZO = 360;
myNewDate=new Date(myOldDateObj.getTime() + (60000*(myOldDateObj.getTimezoneOffset()-myTZO)));
alert(myNewDate);

2
正しいナイーブ時刻が表示されますが、myOldDateObjからのタイムゾーン情報は保持されます。したがって、実際にはそれは間違った時間です(時計の時間ではなく、時間のインスタンスとして時間を取る場合)。
gabn88 2016年

@ gabn88:Javascriptを使用してサーバー時間を変更することはできません...サーバー時間を修正するには、オペレーティングシステムレベルで行います。
Cedric Simon、

2
サーバー時間を修正する必要はありません;)サーバー時間は常に私にとってUTCです。しかし、私は異なるタイムゾーンで異なる組織を持っています。そして、彼らのデバイスは、彼らがどこにいても、彼らの組織が配置されている場所の時間を常に示すべきです。
gabn88 2016年

日付を常にXタイムゾーンで表示するという同様の問題があります。サーバーからすべての日付を文字列形式で送信し、ブラウザではローカルタイムゾーンの日付として扱います。
Venkateswara Rao

5

toLocaleString()メソッドを使用してタイムゾーンを設定できます。

new Date().toLocaleString('en-US', { timeZone: 'Indian/Christmas' })

インドの場合、「Indian / Christmas」を使用でき、以下はさまざまなtimeZonesです。

"Antarctica/Davis",
    "Asia/Bangkok",
    "Asia/Hovd",
    "Asia/Jakarta",
    "Asia/Phnom_Penh",
    "Asia/Pontianak",
    "Asia/Saigon",
    "Asia/Vientiane",
    "Etc/GMT-7",
    "Indian/Christmas"

あなたはtimeZoneを設定するのではなく、そのtimeZoneで表現された時間で文字列を生成します。日付は変わりません。
Gerard ONeill、


4

タイムゾーンを変換する必要があるだけの場合は、最小限の機能のみを備えた簡略化されたバージョンモーメントタイムゾーンをアップロードしました。その〜1KB +データ:

S.loadData({
    "zones": [
        "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6",
        "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5",
    ],
    "links": [
        "Europe/Paris|Europe/Madrid",
    ]
});

let d = new Date();
console.log(S.tz(d, "Europe/Madrid").toLocaleString());
console.log(S.tz(d, "Australia/Sydney").toLocaleString());

2

「-」記号で区切られた年、月、日の変数と、HH:mm:ssパターンの「T」と時刻を変数に設定し、文字列の最後に+01:00を続けます(私の場合はタイムゾーンは+1です)。次に、この文字列を日付コンストラクタの引数として使用します。

//desired format: 2001-02-04T08:16:32+01:00
dateAndTime = year+"-"+month+"-"+day+"T"+hour+":"+minutes+":00+01:00";

var date = new Date(dateAndTime );

2

使用できる外部ライブラリに関して制限されていることに注意してください。moment.jsとtimezone-jsは私の選択肢ではありませんでした。

私が持っているjs日付オブジェクトはUTCです。特定のタイムゾーンでこの日付から日付と時刻を取得する必要がありました(私の場合は「アメリカ/シカゴ」)。

 var currentUtcTime = new Date(); // This is in UTC

 // Converts the UTC time to a locale specific format, including adjusting for timezone.
 var currentDateTimeCentralTimeZone = new Date(currentUtcTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));

 console.log('currentUtcTime: ' + currentUtcTime.toLocaleDateString());
 console.log('currentUtcTime Hour: ' + currentUtcTime.getHours());
 console.log('currentUtcTime Minute: ' + currentUtcTime.getMinutes());
 console.log('currentDateTimeCentralTimeZone: ' +        currentDateTimeCentralTimeZone.toLocaleDateString());
 console.log('currentDateTimeCentralTimeZone Hour: ' + currentDateTimeCentralTimeZone.getHours());
 console.log('currentDateTimeCentralTimeZone Minute: ' + currentDateTimeCentralTimeZone.getMinutes());

UTCは現在、「アメリカ/シカゴ」より6時間進んでいます。出力は次のとおりです。

currentUtcTime: 11/25/2016
currentUtcTime Hour: 16
currentUtcTime Minute: 15

currentDateTimeCentralTimeZone: 11/25/2016
currentDateTimeCentralTimeZone Hour: 10
currentDateTimeCentralTimeZone Minute: 15

11
new Date();UTCではなくローカルタイムゾーンを返す
Mirko

1
ドキュメントから:If no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings.
Mirko

うーん。ちょっと混乱しています。これは日付のタイムゾーンを変更しません。むしろ、変更された時間で新しい日付を作成します。正規表現を使用して、toLocaleString呼び出しで作成された文字列から必要な値を抽出する方がはるかに明確です。
Gerard ONeill

2

ここに私のコードがあります、それは完全に機能しています、あなたは下のデモを与えることで試すことができます:

$(document).ready(function() {
   //EST
setInterval( function() {
var estTime = new Date();
 var currentDateTimeCentralTimeZone = new Date(estTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));
var seconds = currentDateTimeCentralTimeZone.getSeconds();
var minutes = currentDateTimeCentralTimeZone.getMinutes();
var hours =  currentDateTimeCentralTimeZone.getHours()+1;//new Date().getHours();
 var am_pm = currentDateTimeCentralTimeZone.getHours() >= 12 ? "PM" : "AM";

if (hours < 10){
     hours = "0" + hours;
}

if (minutes < 10){
     minutes = "0" + minutes;
}
if (seconds < 10){
     seconds = "0" + seconds;
}
    var mid='PM';
    if(hours==0){ //At 00 hours we need to show 12 am
    hours=12;
    }
    else if(hours>12)
    {
    hours=hours%12;
    mid='AM';
    }
    var x3 = hours+':'+minutes+':'+seconds +' '+am_pm
// Add a leading zero to seconds value
$("#sec").html(x3);
},1000);


});
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<p class="date_time"><strong id="sec"></strong></p>
</body>
</html>


StackOverflowへようこそ!このコードがどのように機能し、何をするかのような詳細情報を提供できますか?それはどのように問題を修正しますか?
DarkSuniuM 2018年

上記のコードでは、タイムゾーンを他の国のタイムゾーンに更新しています。
Sahil Kapoor 2018年

HTMLをHTMLファイルに配置する必要があり、上記のjqueryコードはフッターに含める必要があります。あなたが他の国のタイムゾーンのおかげたい場合は、これら2つの値を更新する必要があります(「EN-US」、{「アメリカ/シカゴ」TIMEZONE})あたりのように、それはあなたのために動作します
サヒールカプール

待ってください。私は注意深く見ずにこれを賛成しただけです。なぜ1を追加するのcurrentDateTimeCentralTimeZone.getHours()ですか?それが仕事とseeking27の回答と同じであるということがなければstackoverflow.com/a/40809160/1404185
chetstone

1

これを日付のタイムゾーンをインドに変換するためにも試すことができます:

var indianTimeZoneVal = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'});
var indainDateObj = new Date(indianTimeZoneVal);
indainDateObj.setHours(indainDateObj.getHours() + 5);
indainDateObj.setMinutes(indainDateObj.getMinutes() + 30);
console.log(indainDateObj);

1
2番目のステップ自体の後、私はインドで時間を取得します...では、なぜ5&1 / 2hrsをまだそれに追加しているのですか?
user3833732 2018年

その方法を使用しているときに、ノルウェーでChromeを使用してコンソールログを記録すると、次のようになります。オリジナル:2018年9月27日15:53:46 GMT + 0200(中央ヨーロッパゾーン)。変更日:2018年9月27日木曜日19:23:46 GMT + 0200(中央ヨーロッパ人sommertid)。「sentraleuropeisk sommertid」とは、中央ヨーロッパ夏時間を意味します。インドでサマータイムが必要なときにそれが機能するかどうか、またはインドにいてヨーロッパでサマータイムが必要なときにその逆も同様かどうかはわかりません。
ケブマン2018

このようにsetHours()を使用しても、日、月、年の遷移は考慮されません。たとえば、新しいDellでの8日の午前3時30分は、ロンドンでの7日の午後11時です。次に、月末、年末、うるう日を考慮します。日付にその計算を実行させる<pre> let local_time = new Date(zulu_time.getTime()+ 3600000 * std_timezone.timezone_factor-60 * 60 * 1000); let date_str = local_time.toISOString()。slice(0、10); let time_str = local_time.toISOString()。slice(11、-1); let timezone_str = std_timezone.timezone_str; </ pre>
リンカーンランドールマクファーランド

1

このページからのリンクを含む多くを見回して、瞬間タイムゾーンを使用して、この素晴らしい記事を見つけました:

https://www.webniraj.com/2016/11/23/javascript-using-moment-js-to-display-dates-times-in-users-timezone/

要約すると:

ユーザーのタイムゾーンを取得する

var tz = moment.tz.guess();
console.info('Timezone: ' + tz);

例:タイムゾーン:ヨーロッパ/ロンドン

デフォルトのユーザーのタイムゾーンを設定する

moment.tz.setDefault(tz);

カスタムタイムゾーンを設定する

moment.tz.setDefault('America/Los_Angeles');

日付/時刻をローカルタイムゾーンに変換します。元の日付/時刻がUTCであると想定します

moment.utc('2016-12-25 07:00').tz(tz).format('ddd, Do MMMM YYYY, h:mma');

返品:2016年12月25日、午前7時

日付/時刻をLA時間に変換

moment.utc('2016-12-25 07:00').tz('America/Los_Angeles').format('ddd, Do MMMM YYYY, h:mma');

返品:2016年12月24日、土曜日、午後11時

LA時間からロンドンに変換

moment.tz('2016-12-25 07:00', 'America/Los_Angeles').tz('Europe/London').format( 'ddd, Do MMMM YYYY, h:mma' );

返品:2016年12月25日、午後3時


1

https://www.npmjs.com/package/ctoc_timezoneを使用することもでき ます

それは多くの単純な実装とフォーマットのカスタマイズを持っています。

toTimeZoneでの形式の変更:

CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");

出力:

28th Feb 2013 19:00:00 EST

ドキュメントで複数の機能を確認できます。


0

これに使用できる「timezones.json」というnpmモジュールがあります。基本的には、夏時間とオフセットに関する情報を含むオブジェクトを含むjsonファイルで構成されています。

asia / jakartaの場合、このオブジェクトを返すことができます。

{
  "value": "SE Asia Standard Time",
  "abbr": "SAST",
  "offset": 7,
  "isdst": false,
  "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
  "utc": [
    "Antarctica/Davis",
    "Asia/Bangkok",
    "Asia/Hovd",
    "Asia/Jakarta",
    "Asia/Phnom_Penh",
    "Asia/Pontianak",
    "Asia/Saigon",
    "Asia/Vientiane",
    "Etc/GMT-7",
    "Indian/Christmas"
  ]
}

あなたはそれをここで見つけることができます:

https://github.com/dmfilipenko/timezones.json

https://www.npmjs.com/package/timezones.json

お役に立てれば幸いです


0

Java 8 java.timeパッケージに精通している人、またはjoda-timeおそらくブロックの新しい子、js-jodaライブラリーが好きな人

インストール

npm install js-joda js-joda-timezone --save

<script src="node_modules/js-joda/dist/js-joda.js"></script>
<script src="node_modules/js-joda-timezone/dist/js-joda-timezone.js"></script>
<script>
var dateStr = '2012/04/10 10:10:30 +0000';
JSJoda.use(JSJodaTimezone);
var j = JSJoda;
// https://js-joda.github.io/js-joda/esdoc/class/src/format/DateTimeFormatter.js~DateTimeFormatter.html#static-method-of-pattern
var zonedDateTime = j.ZonedDateTime.parse(dateStr, j.DateTimeFormatter.ofPattern('yyyy/MM/dd HH:mm:ss xx'));
var adjustedZonedDateTime = zonedDateTime.withZoneSameInstant(j.ZoneId.of('America/New_York'));
console.log(zonedDateTime.toString(), '=>', adjustedZonedDateTime.toString());
// 2012-04-10T10:10:30Z => 2012-04-10T06:10:30-04:00[America/New_York]
</script>

本当のJavaの性質では、それはかなり冗長な笑です。しかし、移植されたJavaライブラリーであり、特に1800年代のテストケースを移植したことを考えると、おそらく非常に正確に機能します。

クロノ操作は難しいです。他の多くのライブラリがエッジケースでバグがあるのはそのためです。Moment.jsはタイムゾーンを正しく設定しているように見えますが、私が目にした他のjsライブラリ(などtimezone-js)は信頼できるものではないようです。


0

私は最近Typescriptでこれを行いました:

// fromTimezone example : Europe/Paris, toTimezone example: Europe/London
private calcTime( fromTimezone: string, toTimezone: string, dateFromTimezone: Date ): Date {
  const dateToGetOffset = new Date( 2018, 5, 1, 12 );

  const fromTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: fromTimezone, hour12: false } );
  const toTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: toTimezone, hour12: false } );

  const fromTimeHours: number = parseInt( fromTimeString.substr( 0, 2 ), 10 );
  const toTimeHours: number = parseInt( toTimeString.substr( 0, 2 ), 10 );

  const offset: number = fromTimeHours - toTimeHours;

  // convert to msec
  // add local time zone offset
  // get UTC time in msec
  const dateFromTimezoneUTC = Date.UTC( dateFromTimezone.getUTCFullYear(),
    dateFromTimezone.getUTCMonth(),
    dateFromTimezone.getUTCDate(),
    dateFromTimezone.getUTCHours(),
    dateFromTimezone.getUTCMinutes(),
    dateFromTimezone.getUTCSeconds(),
  );

  // create new Date object for different city
  // using supplied offset
  const dateUTC = new Date( dateFromTimezoneUTC + ( 3600000 * offset ) );

  // return time as a string
  return dateUTC;
}

「en-UK」フォーマットはシンプルなため、使用しています。「en-US」または何でも機能する可能性があります。

最初の引数がロケールのタイムゾーンであり、secondeがターゲットのタイムゾーンである場合、正しいオフセットのDateオブジェクトを返します。


0

モーメントタイムゾーンを使用できませんでした。他の誰かが同じ問題に直面した場合に備えて、この回答を追加します。だから私は2018-06-14 13:51:00私のから来る日付文字列を持っていますAPI。これが保存されていることは知ってUTCいますが、文字列はそれ自体ではわかりません。

私は瞬間タイムゾーンを知らせ、この日付は次のようにしてどのタイムゾーンからのものかを知らせます:

let uTCDatetime = momentTz.tz("2018-06-14 13:51:00", "UTC").format();
// If your datetime is from any other timezone then add that instead of "UTC"
// this actually makes the date as : 2018-06-14T13:51:00Z

今私はそれを特定のタイムゾーンに変換したいと思います:

let dateInMyTimeZone = momentTz.tz(uTCDatetime, "Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss");
// now this results into: 2018-06-14 19:21:00, which is the corresponding date in my timezone.

0

希望する国のタイムゾーンを設定するだけで、1分ごとにSetInteval()関数を使用して更新をHTMLで簡単に表示できます。関数formatAMPM()は、12時間形式とAM / PM時間表示を管理します。

$(document).ready(function(){
        var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
        pakTime = new Date(pakTime);

        var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
        libyaTime = new Date(libyaTime);



         document.getElementById("pak").innerHTML = "PAK  "+formatAMPM(pakTime);
         document.getElementById("ly").innerHTML = "LY   " +formatAMPM(libyaTime);

        setInterval(function(today) {
            var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
            pakTime = new Date(pakTime);

            var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
            libyaTime = new Date(libyaTime);


           document.getElementById("pak").innerHTML = "PAK  "+formatAMPM(pakTime);
           document.getElementById("ly").innerHTML = "LY  " +formatAMPM(libyaTime);

        },10000);

         function formatAMPM(date) {
            var hours = date.getHours();
            var minutes = date.getMinutes();
            var ampm = hours >= 12 ? 'pm' : 'am';
            hours = hours % 12;
            hours = hours ? hours : 12; // the hour '0' should be '12'
            minutes = minutes < 10 ? '0'+minutes : minutes;
            var strTime = hours + ':' + minutes + ' ' + ampm;
            return strTime;
        }


    });

-1

日付オブジェクトを任意のタイムゾーンに変換する簡単な方法はわかりませんが、ローカルタイムゾーンに変換したい場合はDate.prototype.getTime()、それに対応するミリ秒数に変換して、また戻すことができます。

date = new Date('2016-05-24T13:07:20');
date = new Date(date.getTime());

たとえば、私のようにオーストリアにいる場合(そして夏です)の代わりにがdate.getHours()返されます。1513

さまざまな日時関数が一部のブラウザーで非標準の動作を示す可能性があることを読んだので、まずこれをテストしてください。Chromeで動作することを確認できました。


1
なぜこれが投票されたのですか?これは、これを行う最も簡単で最良の方法です。上記の回答のほとんどは、夏/冬の時間を考慮に入れていません
MortenSickel 2018年

2行目のポイントは何ですか?Dateコンストラクタは、ローカルタイムゾーンをすでに想定しています。これらの行はどちらも、ローカルブラウザのタイムゾーンで日付を返し、夏時間のある別のタイムゾーンに変換する方法についての質問には答えません。
クロエ

-1

現在のタイムゾーンのタイムゾーンオフセット

date +%s -d '1 Jan 1970'

私のGMT + 10タイムゾーン(オーストラリア)では-36000を返しました


-1

1つのアプローチは、特定の時間の新しいタイムゾーンのオフセットを計算することです。

この質問の正確な直接的な解決策ではありませんが、私のユースケースでは、文字列出力では不可能だった結果の時間を使って計算を行う必要がありました。ここでは、すべての人に関数を残しておきます。

これは、Nodeおよび主要な最新のブラウザーで機能するコアロジックにすぎません。

function getTimezoneOffset(unixtime, timezone){

  // Convert Unix Time to Data Object
  var date = new Date(unixtime * 1000);


  // Define Options for Formatter
  var options = {
    year: 'numeric', month: 'long', day: '2-digit',
    hour: '2-digit', minute: '2-digit', second: '2-digit',
    timeZone: timezone
  };

  // Get Date in New Timezone
  var new_date_string = Intl.DateTimeFormat(void 0, options).format(date); // Output: May 15, 2020, 02:40:12 AM


  // New Time in Seconds with Error-Fix for Date Conversion
  var time_with_fix = (
    ( new Date(new_date_string) ).getTime() / 1000 - // Convert Date into Seconds (In Local Timezone)
    ( new Date().getTimezoneOffset() * 60 ) // Local Timezone Offset in Seconds
  );


  // Return Timezone Offset
  return ( time_with_fix - unixtime ); // Return Offset in Seconds

};


///////////////////////////TEST/////////////////////////////////
var current_time = Math.floor( new Date().getTime()/1000 ); 
console.log(
  "getTimezoneOffset(current_time, 'America/New_York'):",
  getTimezoneOffset(current_time, 'America/New_York')/3600
);
console.log(
  "getTimezoneOffset(current_time, 'Australia/Sydney'):",
  getTimezoneOffset(current_time, 'Australia/Sydney')/3600
);


-6

迅速で汚れた手動アワーチェンジャーとリターン:

return new Date(new Date().setHours(new Date().getHours()+3)).getHours()

汚すぎる(そして汚すぎる)
Maxwell sc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.