我的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日期对象。
答案 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');