在JavaScript中将日期转换为另一个时区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JavaScript中将日期转换为另一个时区相关的知识,希望对你有一定的参考价值。

我正在寻找一个功能,将日期在一个时区转换为另一个时区。

它需要两个参数,

  • 日期(格式为“2012/04/10 10:10:30 +0000”)
  • 时区字符串(“亚洲/雅加达”)

时区字符串在http://en.wikipedia.org/wiki/Zone.tab中描述

是否有捷径可寻?

答案

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

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

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

var indiaTime = new Date().toLocaleString("en-US", timeZone: "Asia/Kolkata");
indiaTime = new Date(indiaTime);
console.log('India time: '+indiaTime.toLocaleString())
另一答案

这是我的代码,它工作得很好,你可以试试下面的演示:

$(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>
另一答案

设置一个带有年份,月份和日期的变量,用“ - ”符号分隔,再加上“T”和时间用HH:mm:ss模式,然后是字符串末尾的+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 );
另一答案

我应该注意到,我可以使用哪些外部库受到限制。 moment.js和timezone-js对我来说不是一个选择。

我拥有的js日期对象是UTC。我需要在特定的时区(在我的情况下为'America / Chicago')中获取此日期的日期和时间。

 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目前比“America / Chicago”早6个小时。输出是:

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

currentDateTimeCentralTimeZone: 11/25/2016
currentDateTimeCentralTimeZone Hour: 10
currentDateTimeCentralTimeZone Minute: 15
另一答案

看了很多,包括这个页面的链接,我发现这篇很棒的文章,使用时刻时区:

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:00

将日期/时间转换为LA时间

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

退货时间:2016年12月24日星期六,晚上11:00

从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:00

另一答案

你也可以使用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

您可以在doc中探索多种功能。

另一答案

你可以使用一个名为'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

希望它有用

另一答案

您也可以尝试将日期时区转换为印度:

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);
另一答案

熟悉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.D

以上是关于在JavaScript中将日期转换为另一个时区的主要内容,如果未能解决你的问题,请参考以下文章

如何在Javascript中将日期转换为其他时区[重复]

如何在javascript中将日期时间从用户时区转换为EST [重复]

使用 pytz 将日期时间从一个时区转换为另一个时区

如何在java中使用日光将日期格式从一个时区转换为另一种时区[重复]

Python:如何将日期时间/时间戳从一个时区转换为另一个时区?

在Android中将日期格式转换为另一个日期?