我有一种奇怪的情况,我不知道如何处理。我在开发模式下有一个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);
}
答案 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;
感谢。