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


336

我正在寻找一种将一个时区的日期转换为另一个时区的函数。

它需要两个参数,

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

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

是否有捷径可寻?


1
查找给定城市的UTC偏移量。stackoverflow.com/questions/3002910/…–
布兰登·布恩

3
我不仅要计算UTC偏移,还要计算夏令时/夏令时。因此时间将正确返回。
拉兹罕(Rizky Ramadhan)2012年



使用Unix date命令关闭您的时区:date +%s -d'1970年1月1日
安东尼

Answers:


191

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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString


1
我更改了答案,因为这是正确且标准的方法,无需使用任何库。
里兹基·拉马丹(Rizky Ramadhan)

5
MDN文档明确指出,所有实现中唯一需要识别的时区是UTC。(stackoverflow.com/questions/10087819/…)单击IE11中的[运行代码段]按钮会产生错误。
维维安河

1
如果有人正在寻找适用于所有浏览器的实施方案,那么他们可以根据自己的
喜好

14
此答案显示正确地将时区传递给toLocaleString,但是随后却非常错误地显示了将该字符串传递回Date构造函数。那是自找麻烦。日期字符串解析器不需要接受特定于语言环境的格式,并且输入将被视为在本地时区中。不要那样做 只需使用第一个toLocalString调用的字符串输出即可。
马特·约翰逊

4
@MattJohnson,那么您将无法使用getHour()或此类方法
Ali Padida

131

对于moment.js用户,您现在可以使用moment-timezone。使用它,您的函数将如下所示:

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

3
我不确定如何添加新时区,文档并没有帮助我。我只是一个程序员,不是时间专家!
Parziphal 2015年

8
这里的问题是,这不会返回新的Date对象,而是返回一个字符串。如果那是您想要的,那当然很好。
nickdnk

2
不是“返回时间(时间).tz(区域).format(格式);” ?您在代码中输入的代码出现了“无效日期”错误。
塔雷克,2016年

1
无法在浏览器中加载Moment.js。很伤心:(
Daniil Shevelev

4
如果您不满意将tz数据库的副本发送给浏览器180K,并且可以在较旧的浏览器上生存到当前时区,请尝试使用@lambinator的答案Date.prototype.toLocaleString
Peter V.Mørch'17

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
很好。。。但是我认为他希望根据传入的城市为他查询补偿金额。
布兰登·布恩

117
这没有考虑夏令时更改。
Robotbugs

12
没有回答问题,但回答了我的(+1)
Reign.85年

那“ 3600000”真的杀死了我!在输入中,tz应以小时为单位!并且,应该减去它。因此,如果您通过:var d = new Date calcTime('',d.getTimezoneOffset()/ 60); 它应该在同一时间回馈。
Praveen

1
这个答案已经严重过时了,应该删除,特别是使用toLocaleString的部分,当它移到另一个时区时,它将很可能报告主机时区。有很多更好的方法可以手动为不同的偏移量创建时间戳。
RobG

89

除Safari外,大多数桌面(非移动)浏览器都支持带有参数的toLocaleString函数,较旧的浏览器通常会忽略这些参数。

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

4
未能在Firefox和边缘:(
森那维达斯

10
因为这在FF和IE11 +中很难失败,所以需要找到另一个解决方案。
jdavid.net 2015年

2
Edge和chrome喜欢它:)
Suhail Mumtaz Awan

6
它现在只能在Chrome v59和Firefox桌面v54上运行,并在Android v59和iOS 10.3上的Safari 10上运行Chome。在IE10上不起作用。MDN对Date.prototype.toLocaleString()的描述具有toLocaleStringSupportsLocales()使您能够可靠地检查支持的实现。
Peter V.Mørch'17

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,并且它也没有在自述文件中做广告,这对于寻找它的人来说是一个不好的提示。参见:github.com/mde/timezone-js/issues/51以及许多其他已解决但似乎无法解决的问题。

@nus是的,但实际上没有针对客户端时区/日期管理的解决方案... jQuery ui datepicker一直使我发疯。欢呼声
Lucas

2
@Marabunta,好像moment-timezone(由Brian Di Palma回答)支持DST github.com/moment/moment-timezone/issues/21
welldan97

2
不要使用TimezoneJS,它会在DST更改周围出现错误。
matf

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
Chloe,

这实际上是最好的答案。toLocaleString具有不一致的实现,并且从IE11开始有效。
dlsso

仅供参考:至少在Windows 8.1上,这实际上在IE11中不起作用。当您尝试创建formatter对象时,将得到:```timeZone'的选项值'Asia / Jakarta'超出有效范围。预期:['UTC']```
veddermatic

有没有一种方法可以将最终结果从格式化程序再次转换为Date对象?
mding5692 '19

10

得到它了 !

想要强制显示的日期=服务器日期,不影响本地设置(UTC)。

我的服务器是GMT-6-> new Date()。getTimezoneOffset()= 360。

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

2
尽管它显示的是正确的原始时间,但仍保留来自myOldDateObj的时区信息。所以实际上这是错误的时间(当您将时间作为实例而不是手表上的时间时)。
gabn88 '16

@ gabn88:您将无法使用Javascript更改服务器时间...要固定服务器时间,请在操作系统级别进行。
塞德里克·西蒙

2
我不需要固定服务器时间;)服务器时间对我而言始终是UTC。但是我在不同的时区有不同的组织。他们的设备应始终显示其组织驻地的时间,无论他们身在何处。
gabn88 '16

我们也有类似的问题,总是显示日期X时区。我们尝试从服务器以字符串格式发送所有日期,而在浏览器中,我们只是将它们视为本地时区日期。
Venkateswara Rao

5

您可以使用toLocaleString()方法设置时区。

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

在印度,您可以使用“印度/圣诞节”,以下是各种时区,

"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

toLocaleString溶液已经给3年前
Dan Dascalescu

4

如果您只需要转换时区,我已经上传了简化版moment-timezone,仅包含最低限度的功能。它的〜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

设置变量,使用年,月和日,用'-'符号隔开,再加上'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 );

2

我应该注意,我只能使用哪些外部库。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当前比“美国/芝加哥”早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

我上面给出的代码是将您的时区更新为其他国家的时区。
萨希尔·卡普尔

您需要将HTML放入html文件中,并且上面给出的jquery代码必须位于页脚中。它会为你工作按(“EN-US”,{区:“美国/芝加哥”}),您需要更新这两个值,如果你想其他国家的时区感谢
萨赫勒卡普尔

不用了 我只是在没有仔细看的情况下投票了。为什么要加1 currentDateTimeCentralTimeZone.getHours()?没有它,它将起作用,并且与寻求27的答案相同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
在第二步本身之后,我得到了印度的时间...那为什么还要增加5、1 / 2小时呢?
user3833732

当使用该方法时,当我使用Chrome控制台日志时,在挪威得到以下信息:原始:2018年9月27日星期四15:53:46 GMT + 0200(sentraleuropeisk sommertid)。修改时间:2018年9月27日星期四19:23:46 GMT + 0200(sentraleuropeisk sommertid)。“ sentraleuropeisk sommertid”是指中欧夏季时间。不知道当您需要印度的夏季时间是否可行,反之亦然,当您在印度并且需要欧洲的夏季时间是否相反,依此类推。
Kebman

像这样使用setHours()不能说明日,月,年的转换,例如,新戴尔公司8日上午3:30在伦敦7号下午11点。然后考虑月末,年和leap日。让Date做数学运算<pre>让local_time = new Date(zulu_time.getTime()+ 3600000 * std_timezone.timezone_factor-60 * 60 * 1000); 让date_str = local_time.toISOString()。slice(0,10); 让time_str = local_time.toISOString()。slice(11,-1); 让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);

返回值,例如:时区:Europe / London

设置默认用户时区

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

将日期/时间转换为洛杉矶时间

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

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

从洛杉矶时间转换为伦敦

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



0

您可以使用一个名为“ timezones.json”的npm模块;它基本上由一个json文件组成,该文件的对象包含有关夏时制和偏移量的信息。

对于亚洲/雅加达,它将能够返回此对象:

{
  "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'ish测试用例,它可能也可以非常精确地工作。

计时操作很难。这就是为什么许多其他库在极端情况下会出错的原因。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”或其他有效的方法。

如果第一个参数是您的语言环境时区,第二个参数是您的目标时区,则它将返回具有正确偏移量的Date对象。


0

我在使用Moment Timezone时遇到了麻烦。如果有人遇到相同的问题,我将添加此答案。所以我有一个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

只需设置您想要的国家/地区时区,您就可以轻松地在HTML中显示每1分钟更新一次后使用SetInteval()函数进行的更新。函数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()现在将返回,15而不是13如果您像我一样在奥地利(现在是夏天)。

我已经阅读到各种日期时间函数在某些浏览器中可能表现出非标准行为,因此请首先进行测试。我可以确认它可以在Chrome浏览器中使用。


1
为什么这被否决了?到目前为止,这是最简单,最好的方法。上面的大多数答案都没有考虑夏季/冬季的时间
MortenSickel

第二行的意义是什么?Date构造函数已经假定您的本地时区。这两行都返回本地浏览器时区的日期,并且没有回答有关如何转换为具有夏令时的其他时区的问题。
Chloe

-1

您当前时区的时区偏移

date +%s -d '1 Jan 1970'

对于我的GMT + 10时区(澳大利亚),它返回-36000


-6

快速,肮脏的手动时标器并返回:

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

太脏(太脏)
Maxwell sc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.