如何修复MomentJS和Asp.net Core之间的时差

时间:2016-12-16 22:30:12

标签: javascript asp.net angularjs asp.net-core

我的UI中设置的日期来自此angularjs date picker。它被设置为moment.js对象,它包含我的时区(东部)的GMT偏移量。当我将moment对象提交回我的Asp.net Core端点时,时间将转换为没有偏移的时间。例如,当我在javascript moment对象对象中检查日期时:

timeIn: Fri Dec 16 2016 05:00:00 GMT-0500 (Eastern Standard Time)

当我在.net core中检查我的对象时:

TimeIn: 12/16/2016 10:00:00AM

我希望后端的数据显示为在UI上输入的确切时间,而不管时区如何。因此,如果他们进入凌晨5点,应该存储的时间后端是凌晨5点。当moment对象转换为JSON以发送到后端时,它似乎会更改值。当我在UI上执行timeIn对象的JSON.stringify()时,我得到:

"2016-12-16T10:00:00.000Z"

有没有办法从前端的时区剥离偏移数据,以便输入的时间与发送的时间完全相同?

P.S。我知道有很多关于时间的问题,但我无法为我的案例找到合适的问题。谢谢你的帮助

编辑:我正在使用.net DateTime对象来接受javascript日期对象。

1 个答案:

答案 0 :(得分:0)

此格式包含5个空格:

Fri Dec 16 2016 05:00:00 GMT-0500 (Eastern Standard Time)

我们可以假设20是本年度降落的最低安全入口。获取下一个空格字符并从那里拆分。

  

注意:这个完全基于假设,但看起来效果更好。

您可以执行以下操作:

var time = "Fri Dec 16 2016 05:00:00 GMT-0500 (Eastern Standard Time)";
console.log(time.substr(0, time.indexOf(" ", 20)));

另外,参考How to get the nth occurrence in a string?,我们可以做得更好。

function getPosition(string, subString, index) {
   return string.split(subString, index).join(subString).length;
}

我们需要第5次出现空间:

function getPosition(string, subString, index) {
   return string.split(subString, index).join(subString).length;
}
var time = "Fri Dec 16 2016 05:00:00 GMT-0500 (Eastern Standard Time)";
console.log(time.substr(0, getPosition(time, " ", 5)));

第二种方法似乎比第一种方法更好。

第三种方法是使用Moment.js库将时间格式化为.Net接受的格式:

timeIn = timeIn.format('MM-DD-YYYY h:mm:ss');