首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript中用于数学操作的字符串解析

Javascript中用于数学操作的字符串解析
EN

Stack Overflow用户
提问于 2017-05-11 23:23:23
回答 2查看 60关注 0票数 1

我有两个价值观。一个字符串和一个INT TimeZone是以下值之一的字符串:

代码语言:javascript
复制
'EST-5:00' || 'CST-6:00' || 'MST-7:00' || 'PST-8:00'

DST将是0 || 1的一个整数。

试图找出如何获得补偿的最佳方法。偏移量= MATH.abs(TimeZone# + DST)

代码语言:javascript
复制
let offset = MATH.abs(-5 + 1) // = 4 ('EST-5:00') + (DST = 1)

代码语言:javascript
复制
let offset = MATH.abs(-6 + 0) // = 6 ('CST-6:00') + (DST = 0)

代码语言:javascript
复制
let offset = MATH.abs(-8 + 1) // = 7 ('PST-8:00') + (DST = 1)

解析字符串以获得数字值和添加DST值的最佳方法是什么?

我的最终目标实际上是获得一个我拥有的DateTime,例如:

代码语言:javascript
复制
let DateTime = '2017-05-11 10:34:43'

以及上面的TimeZone字符串(从与事件相关的元数据中检索),并使用DST (从与事件相关的元数据中检索)将其转换为UTC .

因此,考虑到我需要处理的数据,我试图找出我需要向DateTime添加多少(小时)才能将其设置为UTC。

所以

代码语言:javascript
复制
let utcTime = moment(DateTime).add(offset, 'h');
EN

回答 2

Stack Overflow用户

发布于 2017-05-11 23:34:04

您可以在数字上使用匹配组执行正则表达式:

代码语言:javascript
复制
var value = '(\'PST-8:00\')'.match(/\w{3}-(\d{1})\:/).pop() + DST // => 8 + DST

它查找一系列的三个单词字符,后面跟着一个连字符,然后在一个单数上进行匹配,然后以冒号字符结束。

这只是我的头上的一个快速,所以我相信有方法来收紧正则表达式,但原则仍然是一样的(请参阅MDN上的String.prototype.match文档)。

票数 1
EN

Stack Overflow用户

发布于 2017-05-12 00:05:17

您只需要数字部分,因此可以使用正则表达式获取小时和分钟值:

代码语言:javascript
复制
var tz = 'EST-5:00';
var hm = tz.match(/[+-]?\d\d?/g);

会得到时间部分。hm[0]是带有符号的小时部分,“hm1”是分钟部分。如果你也想要字母部分,你也可以这样做:

代码语言:javascript
复制
var hm = tz.match(/[a-z]+|[+-]?\d\d?/ig);

有些时区可降至15分钟,日光偏移量可达30分钟,因此,以分钟表示偏移量要比以小时表示偏移量更兼容(尽管对于人类来说,它应该是±hh:mm格式)。您还应该保留会议记录部分和标志:

代码语言:javascript
复制
var tz = 'EST-5:00';

function offsetToMins(s) {
  var hm = s.match(/[+-]?\d\d?/g) || []; // Avoid null
  var h = hm[0] * 60;
  var m = +hm[1];

  // A bit of validation
  if (isNaN(h) || isNaN(m)) {
    return 'Invalid input: ' + '"' + s + '"';
  }

  return h + (h<0? m*-1 : m);
}

console.log(offsetToMins(tz))          // -300
console.log(offsetToMins('IST+05:30')) // 330
console.log(offsetToMins('foo'))       // Invalid input: "foo"

现在,夏时制偏移量可以在几分钟内添加,并且值可以以适当的人类可读的格式显示,例如-06:00、-6:00、-0600等等。

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

https://stackoverflow.com/questions/43927084

复制
相关文章

相似问题

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