格式化JS日期时间以更正ISO格式

时间:2019-01-02 21:46:00

标签: angular postgresql typescript asp.net-core entity-framework-core

我已经尝试了几天,以获取服务器端代码(C#),以保存通过API调用发送给Postgres的时间戳。

如果我将DateTime.Now()附加到数据传输对象上似乎很好用,但是当我尝试解析从客户端发送的日期时间时,我得到一个400

**0: "The input was not valid."**. 

作为我的回应。

我的课看起来像这样

TS:

export interface ArtistShows {
    showDate: string;
    venue: string;
    id?: string;
    bandsAlsoPlaying: Array<string>;
}

C#

public class ArtistShow
{
    public Guid Id { get; set; }
    public DateTime ShowDate { get; set; }
    public string Venue { get; set; }
    public string BandsAlsoPlaying { get; set; }

    public virtual Artist Artist { get; set; }
}

映射新表单(带有输入日期)(TS)的方法

private _mapNewShowForm(): ArtistShows {
    let showDate = this.newShowForm.get(this.newShowFormEnum.DATE).value;
    let convertedShowDate = new Date(showDate);

    return {
      bandsAlsoPlaying: [],
      showDate: convertedShowDate.toISOString(),
      venue: `${this.newShowForm.get(this.newShowFormEnum.VENUE).value}, ${this.newShowForm.get(this.newShowFormEnum.CITY).value}`
    };
}

请求中的日期格式:“ 2019-01-04T00:00:00.000Z” 所需格式:“ 2018-12-29 20:23:22.667766” <-日期以没有时区的时间戳记存储在PG中

我的问题是,有人知道我应该以哪种格式将日期发送到后端(听说是ISO 8601)吗?我甚至应该对客户端上的Date做任何事情吗?以及如何将JS日期转换为将保存在PG中的日期?

我还在Postgres中使用Microsoft Entity Framework Core(如果有帮助的话)

2 个答案:

答案 0 :(得分:0)

使用unix_timestamp作为基本格式,并根据需要进行转换

在c#中获取unix时间戳:

var timestamp = new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds();

从C#中的Unix时间戳获取Datetime:

DateTime dt = DateTimeOffset.FromUnixTimeSeconds(1549741828).DateTime;

在javascript中获取unix时间戳:

let timestamp = parseInt(new Date().getTime()/1000);

从C#中的Unix时间戳获取Datetime:

let date = new Date(1549742450 * 1000)

答案 1 :(得分:0)

因此,老实说,我忘记了打开这个问题。 6个月后,我再次询问,得到了我一直在寻找的答案:

Parse JS Date.toIsoString in C#

最后,答案只是使用Convert.ToDateTime(),它为我提供了所需的确切日期格式。

结束这个问题!