解析时间字符串并将其转换为Javascript中的日期对象

解析时间字符串并将其转换为Javascript中的日期对象,javascript,angularjs,date,filter,Javascript,Angularjs,Date,Filter,我想从以下字符串创建一个TypeScript(AngularJS)中的日期对象:08:00:00.000+01:00,以便在末尾使用过滤器仅显示小时和分钟: .filter('toDate', () => { return input => { let date = Date.parse(input); return date; } }) 在HTML中: {{ object.unformatedTimeString | toDate

我想从以下字符串创建一个TypeScript(AngularJS)中的日期对象:
08:00:00.000+01:00
,以便在末尾使用过滤器仅显示小时和分钟:

.filter('toDate', () => {
    return input => {
        let date = Date.parse(input);
        return date;
    }
})
在HTML中:

{{ object.unformatedTimeString | toDate | date: 'H:m' }}
有人知道如何解析这样的时间字符串吗

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);
单调乏味,但不复杂或困难


单调乏味,但并不复杂或困难。

一种解决方案是调整时区的时间,使其成为UTC时间,然后将其应用于当前UTC日期,例如

函数parseToutTime(s){
var now=新日期();
var b=s.match(/\d+\d/g);
变量符号=b[7]='+'?1:-1;
现在.setUTCHours(+b[0]+符号*b[8],+b[2]+符号*b[10],0,0);
现在就回来;
}
//测验
['08:00:00.000+01:00',
'06:30:00.000-08:00',
'04:15:00.000+05:30'].forEach(ts=>
console.log(ts+'->'+parseToutTime(ts.toISOString())

);一种解决方案是调整时区的时间,使其成为UTC时间,然后将其应用于当前UTC日期,例如:

函数parseToutTime(s){
var now=新日期();
var b=s.match(/\d+\d/g);
变量符号=b[7]='+'?1:-1;
现在.setUTCHours(+b[0]+符号*b[8],+b[2]+符号*b[10],0,0);
现在就回来;
}
//测验
['08:00:00.000+01:00',
'06:30:00.000-08:00',
'04:15:00.000+05:30'].forEach(ts=>
console.log(ts+'->'+parseToutTime(ts.toISOString())

);你为什么不从字符串中提取小时和分钟<代码>让[hr,min]=str.split(“:”)。为什么要转换?因为时间字符串中还有时区信息。最好正确转换。你考虑过使用吗?它比javascripts日期对象更通用。@Igor它也更庞大和复杂。如果你有大量的日期操作,那么它是值得的,但不一定是小东西。如果它能很好地集成到AngularJS(1.6.x)中,那么moment.js将是一个选项。你为什么不从字符串中提取小时和分钟呢<代码>让[hr,min]=str.split(“:”)。为什么要转换?因为时间字符串中还有时区信息。最好正确转换。你考虑过使用吗?它比javascripts日期对象更通用。@Igor它也更庞大和复杂。如果你有很多日期操作,那么它是值得的,但不一定是小东西。如果它能很好地集成到AngularJS(1.6.x)中,那么moment.js将是一个选项。没有必要将
[hr,min]
转换为数字,因为乘法将根据需要转换它们,你应该执行
date.setHour(hr,min,0,0)
一次性设置时间。这可能返回当前日期之前的日期,OP应彻底测试以确保逻辑正确,可能需要设置UTC小时和分钟。;-)无需将
[hr,min]
转换为数字,因为乘法将根据需要进行转换,您应该执行
date.setHour(hr,min,0,0)
一次性设置时间。这可能返回当前日期之前的日期,OP应彻底测试以确保逻辑正确,可能需要设置UTC小时和分钟。;-)