Подтвердить что ты не робот

Как получить объект 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? Что мне здесь не хватает?

4b9b3361

Ответ 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?