首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript Date() -获取/偏移多个时区

JavaScript Date() -获取/偏移多个时区
EN

Stack Overflow用户
提问于 2019-11-16 11:02:09
回答 1查看 41关注 0票数 0

我不是js的菜鸟,但我还没有做过大量的dates工作。

我需要在格林尼治标准时间的三个时区(偏移量+5:30,+7,+8)中获取"now“,我不知道var now = new Date();是否会是世界上任何地方的本地"now”,或者我是否需要为每个时区计算一个单独的"now“,以基于格林尼治标准时间或协调世界时进行评估。

然后我需要将"now“变量与这三个时区中的日期( 2019年11月19日上午10:00 )进行比较。例如,

代码语言:javascript
复制
let now = new Date();
let presale530 = new Date('11-19-2019 10:00 AM GMT+5:30'); // Bangalore
if (now > presale530) {
  // start the presale in Bangalore
}

以上操作需要与不同的时区同时进行:

代码语言:javascript
复制
let now = new Date();
let presale7 = new Date('11-19-2019 10:00 AM GMT+7'); // Jakarta
if (now > presale7) {
  // start the presale in Jakarta
}
EN

回答 1

Stack Overflow用户

发布于 2019-11-16 13:51:38

我搞不懂var now = new Date();是世界上任何地方的本地"now“,还是需要为每个时区计算一个单独的"now”,以基于格林尼治标准时间或协调世界时进行评估。

日期是UTC,因此无论本地偏移量如何,“现在”都是相同的,但需要注意的是必须正确设置系统时钟。系统时区偏移量仅在假定为本地值的情况下使用(普通设置方法、解析没有偏移量的字符串等)。

Date.prototype.toString根据主机系统时区偏移量返回一个字符串,普通的get方法返回本地值。

getUTC方法返回UTC值,并且无论主机系统设置如何,它们都应该是相同的(具有与上面相同的警告)。

然而,如果你有一个像“11月19日,2019 10:00 AM”这样的字符串而没有时区偏移,那么你将不得不手动解析和应用偏移(要么编写自己的函数,要么使用库)。

例如,将“2019年11月19日10:00 AM”这样的字符串解析为UTC并应用+05:30这样的时区偏移量的函数是:

代码语言:javascript
复制
/* Parse string in format MMMM DD, YYYY hh:mm a as UTC and apply
** a timezone offset in format +/-HH:mm)
**
** @param {string} s - string to parse
** @param {string} offset - +/-HH:mm default '+00:00'
** @returns {Date}
*/
function myParse(s, offset = '+00:00') {
  let months = ['jan','feb','mar','apr','may','jun',
                'jul','aug','sep','oct','nov','dec'];
  let b = s.split(/[ ,:]+/);
  let m = months.indexOf(b[0].toLowerCase().substr(0,3));
  let hr = +b[3];
  let min = +b[4];
  let ap = b[5];
  hr = (hr % 12) + (ap.toLowerCase() == 'am'? 0 : 12);

  // Get hr and min of timezone offset with sign
  let c = offset.split(':');
  let oSign = c[0] < 0? '-' : '+';
  let oHr = +c[0]
  let oMin = c[1] * (oSign == '-'? -1 : 1);

  // Create date using values as UTC, apply offset
  return new Date(Date.UTC(b[2], m, b[1], hr + oHr, min + oMin)); 
}

// +00:00 - i.e. UTC
console.log(myParse("November 19, 2019 10:00 AM"));
// +05:30
console.log(myParse("November 19, 2019 10:00 AM", '+05:30'));
// -07:00
console.log(myParse("November 19, 2019 12:00 AM", '-07:00'));
// Difference in dates is 12:30, which is the difference in timezone offsets

但是,如果您有其他日期算法要执行或要支持不同格式,库可能会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58887164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档