我有两个价值观。一个字符串和一个INT TimeZone是以下值之一的字符串:
'EST-5:00' || 'CST-6:00' || 'MST-7:00' || 'PST-8:00'DST将是0 || 1的一个整数。
试图找出如何获得补偿的最佳方法。偏移量= MATH.abs(TimeZone# + DST)
let offset = MATH.abs(-5 + 1) // = 4 ('EST-5:00') + (DST = 1)或
let offset = MATH.abs(-6 + 0) // = 6 ('CST-6:00') + (DST = 0)或
let offset = MATH.abs(-8 + 1) // = 7 ('PST-8:00') + (DST = 1)解析字符串以获得数字值和添加DST值的最佳方法是什么?
我的最终目标实际上是获得一个我拥有的DateTime,例如:
let DateTime = '2017-05-11 10:34:43'以及上面的TimeZone字符串(从与事件相关的元数据中检索),并使用DST (从与事件相关的元数据中检索)将其转换为UTC .
因此,考虑到我需要处理的数据,我试图找出我需要向DateTime添加多少(小时)才能将其设置为UTC。
所以
let utcTime = moment(DateTime).add(offset, 'h');发布于 2017-05-11 23:34:04
您可以在数字上使用匹配组执行正则表达式:
var value = '(\'PST-8:00\')'.match(/\w{3}-(\d{1})\:/).pop() + DST // => 8 + DST它查找一系列的三个单词字符,后面跟着一个连字符,然后在一个单数上进行匹配,然后以冒号字符结束。
这只是我的头上的一个快速,所以我相信有方法来收紧正则表达式,但原则仍然是一样的(请参阅MDN上的String.prototype.match文档)。
发布于 2017-05-12 00:05:17
您只需要数字部分,因此可以使用正则表达式获取小时和分钟值:
var tz = 'EST-5:00';
var hm = tz.match(/[+-]?\d\d?/g);会得到时间部分。hm[0]是带有符号的小时部分,“hm1”是分钟部分。如果你也想要字母部分,你也可以这样做:
var hm = tz.match(/[a-z]+|[+-]?\d\d?/ig);有些时区可降至15分钟,日光偏移量可达30分钟,因此,以分钟表示偏移量要比以小时表示偏移量更兼容(尽管对于人类来说,它应该是±hh:mm格式)。您还应该保留会议记录部分和标志:
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等等。
https://stackoverflow.com/questions/43927084
复制相似问题