Angular post service在发送到MVC控制器之前编辑日期时间对象

时间:2017-08-28 07:58:30

标签: angular datetime model-view-controller

我有一种奇怪的情况,我不知道如何处理。我在开发模式下有一个ASP.NET Core Angular应用程序。我正在向数据库发送带有对象的帖子请求,如下所示。

createPosition(pos)
{

    console.log(pos, "Just before we send the position to the server");

    return this.authHttp.post('/api/positions', pos)
        .map(res=>res.json())
        .catch((error:Response)=>{
        return Observable.throw(new AppError(error));
    });
}

现在,pos对象中有一个日期对象,如果我在控制台中调试pos对象,我会得到这个值:

entryDate:2017年8月1日星期二00:00:00 GMT + 0300(Романскоевремя(зима))

不要介意括号中的俄文(罗马时间(冬季))。但是在Controller中(在我在任何操作之前得到对象的输入中),我得到了不同的时间。

EntryDate [DateTime]:{31.07.2017 21:00:00}

我不知道为什么会这样...... 有人有这个问题吗?

控制器

    [HttpPost("/api/positions")]
    [Authorize]
    public IActionResult CreatePosition([FromBody] Trade position)
    {
        //if I debug at this point I already have the weird date

        context.Trades.Add(position);
        context.SaveChanges();
        return Ok(position);
    }

2 个答案:

答案 0 :(得分:0)

您无法通过REST传递实例,您需要传递一个字符串。 我建议你传递时间戳:

dateObject.getTime()

并最终使用以下命令在控制器中重新创建Date对象:

let dateObject = new Date(timestampString);

答案 1 :(得分:0)

因此,在m_建议的解决方法之后,我想出了一个黑客可以使用。我不关心服务器上的时间是否以UTC格式存储,这很好并且实际上很好,因为无论客户端在哪里,他进入数据库的时间都以单区域格式存储。

接下来,根据客户端现在的位置,我获取他的时区并添加/减去存储在数据库中的值,以便客户端获得最适当的表示他的存储值,调整到他所在的当地时间。时刻。

所以这里是代码。每当我从服务器获得任何时间约会时,我现在就这样做,并且调整得非常好。 (this.position是我的对象,我在这种情况下是entryDate)

let offset = new Date().getTimezoneOffset();
let entryDateFromServer = new Date(this.position.entryDate);
let timeInMs = entryDateFromServer.getTime();
var localEntryDate = new Date();
localEntryDate.setTime(timeInMs-(60000*offset));
this.position.entryDate= localEntryDate;

感谢。