我有一个从我的angularjs date picker在UI中设置的日期。它被设置为moment.js对象,并且包含我的时区(东部)的GMT偏移量。当我将矩对象提交回我的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:00 AM,则后端应存储的时间为5:00 AM。当moment对象转换为JSON以发送到后端时,似乎更改了该值。当我在UI上对timeIn对象执行JSON.stringify()时,我得到:
"2016-12-16T10:00:00.000Z"
有没有办法从前端的时区剥离偏移数据,使输入的时间与发送的时间完全相同?
附言我知道关于时间的问题很多,但我找不到适合我的情况的问题。谢谢你的帮助
编辑:我正在使用.net DateTime对象接受javascript日期对象。
最佳答案
此格式包含5个空格:
Fri Dec 16 2016 05:00:00 GMT-0500 (Eastern Standard Time)
我们可以假设
20
是一年中登陆的最小安全条目。获取下一个出现的空格字符并从该处拆分。Note: This one is totally based on assumptions, but it looks like it works better.
您可以执行以下操作:
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;
}
我们需要该空间的第五次出现:
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');
关于javascript - 如何解决MomentJS和Asp.net Core之间的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41193357/