我想在这个字符串中使用TypeScript(AngularJS)创建一个Date对象:08:00:00.000+01:00
,以便最后使用过滤器来显示小时和分钟:
.filter('toDate', () => {
return input => {
let date = Date.parse(input);
return date;
}
})
在HTML中:
{{ object.unformatedTimeString | toDate | date: 'H:m' }}
有没有人知道如何解析这样的时间字符串?
答案 0 :(得分:2)
Let [ts, tz] = str.split(/[\+\-]/);
let [hr, min] = ts.split(':').map(Number);
let offsetSign = str.includes('+') ? 1 : -1;
let [offsetHr, offsetMin] = tz.split(':');
let offset = offsetSign * ((offsetHr * 1000 * 60 * 60) + (offsetMin * 1000 * 60));
let date = new Date();
date.setHour(hr);
date.setMinute(min);
let result = new Date(date.getTime() + offset);
乏味,但不复杂或困难。
答案 1 :(得分:1)
一种解决方案是调整时区的时间,使其成为UTC时间,然后将其应用于当前的UTC日期,例如
function parseToUTCTime(s) {
var now = new Date();
var b = s.match(/\d+|\D/g);
var sign = b[7]=='+'? 1 : -1;
now.setUTCHours(+b[0] + sign*b[8], +b[2] + sign*b[10], 0, 0);
return now;
}
// Tests
['08:00:00.000+01:00',
'06:30:00.000-08:00',
'04:15:00.000+05:30'].forEach(ts =>
console.log(ts + ' -> ' + parseToUTCTime(ts).toISOString())
);