使用ajax帖子发送的打字稿日期

时间:2016-12-25 10:45:33

标签: javascript ajax datetime typescript

我在c#中开发了一个MVC Web应用程序,我使用Typescript来前端。 我有一个控制器的方法,它接收带有数据模型的HttpPost请求,这个数据模型是通过typelite自动生成的typescript类。

在我的请求数据模型中有一个日期时间字段,当我向后端发送请求时,数据时间字段被序列化为这种格式的字符串:“Sun + Dec + 25 + 2016 + 11:29:33 + GMT + 0100 + (ORA + SOLARE +欧洲+西的)” 我喜欢这个文件被serilize成UTC日期时间字符串。

我发送请求的打字稿代码是:

$.ajax({
        method: callingMethod,
        url: urlToCall,
        data: *dataValue,
        beforeSend: function () {
            self.BeforeAsyncAction();
        },
    })
    .done(callbackDone)
    .fail(callbackFail)
    .always(self.CompleteAsyncAction);
}

dataValue是一个具有此接口的类:

export class FileServiceModel extends Gedoc.WebApplication.ServiceModels.BaseServiceModel {
    Allegato: Gedoc.WebApplication.ServiceModels.FileStreamServiceModel;
    Attributi: Gedoc.WebApplication.ServiceModels.AttributoServiceModel[];
    Descrizione: string;
    DimensioneByte: number;
    *DtIn: Date;
    *DtRegistrazione: Date;
    *DtUp: Date;
    Id: number;
    Tags: string;
    Titolo: string;
}
  • 我必须序列化为UTC日期时间的字段。

如何自动序列化此字段的最佳方法

谢谢你的问候

1 个答案:

答案 0 :(得分:0)

javascript Date对象有toUTCString方法,所以:

let d = new Date();
console.log(d); // Sun Dec 25 2016 13:36:02 GMT+0200 (IST)
console.log(d.toUTCString()); // Sun, 25 Dec 2016 11:36:02 GMT

在您的情况下,您可以执行以下操作:

function normalizeDate(data: FileServiceModel) {
    let copy = Object.assign({}, data);
    copy.DtIn = data.DtIn.toUTCString();
    copy.DtRegistrazione = data.DtRegistrazione.toUTCString();
    copy.DtUp = data.DtUp.toUTCString();

    return copy;
}

$.ajax({
        method: callingMethod,
        url: urlToCall,
        data: normalizeDate(dataValue),
        beforeSend: function () {
            self.BeforeAsyncAction();
        },
    })
        .done(callbackDone)
        .fail(callbackFail)
        .always(self.CompleteAsyncAction);
}