Angular 来自Web API响应的角度数据

Angular 来自Web API响应的角度数据,angular,datetime,angular2-observables,Angular,Datetime,Angular2 Observables,我正在开发一个Angular(4.1.2)web应用程序以及相应的ASP.Net核心(1.1)web API 我有一个Angular服务,它向我的web API发出数据http请求,并且Angular服务返回的对象中的日期不是Date类型 在我的场景中,我的web应用程序从我的SQL数据库中获取任务,每个任务都包括开始和结束日期时间。My TasksController使用AutoMapper将每个任务映射到TaskViewModel对象,MyTaskViewModel具有类型为日期时间的开始和

我正在开发一个Angular(4.1.2)web应用程序以及相应的ASP.Net核心(1.1)web API

我有一个Angular服务,它向我的web API发出数据http请求,并且Angular服务返回的对象中的日期不是
Date
类型

在我的场景中,我的web应用程序从我的SQL数据库中获取
任务
,每个
任务
都包括开始和结束
日期时间
。My TasksController使用AutoMapper将每个
任务
映射到
TaskViewModel
对象,My
TaskViewModel
具有类型为
日期时间
的开始和完成属性

如果我在TasksController中设置一个断点并检查要返回的
TaskViewModel
对象,则在请求之后,开始和完成属性的类型为
DateTime
,因此日期、月份、小时等都可以

在Angular中,我有一个
任务api.service.ts
文件,其中包括以下代码:

public getTasks():可观察{
让tasksArray:Observable=this.http.get(“/api/tasks”).map((响应:响应)=>{
返回response.json();
}).接住(这个.把手错误);
tasksArray.forEach(项=>{
console.log(“开始:+
item.map(任务=>{
if(task.start instanceof Date){
log(task.start+“是日期”);
}否则{
log(task.start+“不是日期”);
}
}));
});
返回任务数组;
}
当I
console.log()
开始和完成日期时,它们显示为
2017-01-01T1 0:00:00
。我测试了日期以检查它们

我的任务定义如下:

导出类任务{
私人子女:任务[];
获取子项():任务[]{
//日志(“获取孩子”);
把这个还给孩子们;
};
设置子项(值:任务[]){
//console.log(“设置子项”);
这个。_children=值;
};
建造师(
公共id:string,
公共scheduleId:string,
公共描述:字符串,
公共任务类型ID:编号,
公共任务类型:字符串,
公共位置ID?:编号,
公共启动?:日期,
公开完成:日期,
公共持续时间?:数字,//毫秒
公共父ID?:字符串,
公共依赖项:字符串,
公共标签?:字符串,
儿童?:任务[])
{
如果(子项!=null)
{
这个。孩子=孩子;
};
}
};

我如何确保我的Typescript对象中的开始日期和结束日期为
日期类型?

您是否尝试过dateReviver

public getTasks(): Observable<Task[]> {
    let tasksArray: Observable<Task[]> = this.http.get("/api/tasks")
                .map((response: Response) => {
                        return <Task[]>JSON.parse(response, dateReviver);
                }).catch(this.handleError);
}

function dateReviver(key, value) {  
    var a;  
    if (typeof value === 'string') {  
        a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);  
        if (a) {  
            return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],  
                        +a[5], +a[6]));  
            }  
    }  
   return value;
};
public getTasks():可观察{
让tasksArray:Observable=this.http.get(“/api/tasks”)
.map((响应:响应)=>{
返回JSON.parse(response,dateReviver);
}).接住(这个.把手错误);
}
函数日期恢复器(键,值){
var a;
如果(值的类型=='string'){
a=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(值);
如果(a){
返回新日期(UTC日期(+a[1],+a[2]-1,+a[3],+a[4],
+a[5],+a[6]);
}  
}  
返回值;
};
注意:注意日期时间类型。UTC或本地

参考:


为什么要检查响应类型是日期?您可以根据需要转换为类型。对吗?我只是检查类型来帮助我调查为什么使用日期的业务逻辑代码不能理解日期。我的可观察任务数组中的开始和结束属性只是字母和数字字符串,而不是日期,因此我的业务逻辑无法处理它们。您解决了这个问题吗?我也在经历同样的事情。从web api接收的日期具有未定义的getMonth、getFullYear等值。