Как получить объект Date из json Response в typescript
Вот мой json:
{
"data": [
{
"comment": "3541",
"datetime": "2016-01-01"
}
]
}
Вот модель:
export class Job {
constructor(comment:string, datetime:Date) {
this.comment = comment;
this.datetime = datetime;
}
comment:string;
datetime:Date;
}
Query:
getJobs() {
return this._http.get(jobsUrl)
.map((response:Response) => <Job[]>response.json().data)
}
Проблема заключается в том, что после кастинга до Job[]
я ожидаю, что свойство datetime
будет Date
, но это строка. Не следует ли использовать объект Date? Что мне здесь не хватает?
Ответы
Ответ 1
@Gunter абсолютно прав. Единственное, что я хотел бы добавить, это на самом деле десериализовать объект json, сохраняя его свойства даты как даты, а не строки (из ссылочной позиции это не так просто увидеть этот подход).
Вот моя попытка:
export class Helper
{
public static Deserialize(data: string): any
{
return JSON.parse(data, Helper.ReviveDateTime);
}
private static ReviveDateTime(key: any, value: any): any
{
if (typeof value === 'string')
{
let a = /\/Date\((\d*)\)\//.exec(value);
if (a)
{
return new Date(+a[1]);
}
}
return value;
}
}
Здесь вы можете увидеть этот подход: JSON.parse Function в примере dateReviver.
Надеюсь, что это поможет.
Ответ 2
Нет никакого способа узнать TS/JS, что это значение является датой. Это строка и трактуется как таковая. Другие типы данных различаются, но JSON не предоставляет никакой специальной поддержки для даты. Вам нужно преобразовать его вручную.
См., например, эту дискуссию о том, как переносить и преобразовывать дату с помощью JSON Как мне настроить дату Microsoft JSON?