javascript - 如何解决MomentJS和Asp.net Core之间的时差

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

我有一个从我的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/

相关文章:

c# - URL 用 + 号替换空格

c# - 将 SQL 查询和变量添加到 SharePoint ASPX 页面

asp.net - 移动ASP.NET技术

javascript - 查看不应该更新的时候

javascript - 在指令中使用 $location.url() 在 angularjs 中不起作用

angularjs - 使用 generator-sql-fullstack 在 heroku 上拒绝连接

javascript - 使用堆的优先级队列 - JavaScript 和 C++ 实现之间的区别

Javascript:对象内的数组

javascript - 如何以编程方式选择 ng-option 值?

javascript - 清除文本字段时触发事件 : Javascript