【问题标题】:Show JavaScript date - datetimeoffset(7) in database在数据库中显示 JavaScript 日期 - datetimeoffset(7)
【发布时间】:2015-10-09 18:36:59
【问题描述】:

日期作为 datetimeoffset(7) 存储在数据库中。 MVC 控制器以“10/8/2015 6:05:12 PM -07:00”格式从数据库中获取日期,并将其按原样传递给视图。我正在尝试通过执行以下操作将其转换为正确的日期以在视图中显示为 mm/dd/yyy:

var myDate = "10/8/2015 6:05:12 PM -07:00";
var newDate = New Date(myDate);

然后我在提取日月年之后将其格式化为 mm/dd/yyyy 格式。

IE11 和 Safari 不喜欢这样并在控制台中显示错误“Invalid date”

 var newDate = New Date(myDate)

Chrome 或 Firefox 没有显示任何问题。

现在我知道“10/8/2015 6:05:12 PM -07:00”不是有效的日期字符串。所以我的问题是,如何处理这种情况,让所有主流浏览器都显示正确的日期?

【问题讨论】:

  • “New”是一个错字,应该是“new”
  • “如何处理这种情况”我的建议是在响应中编写一个 JSON 版本的 .NET 对象,然后在 JS 中解析它
  • 出于好奇,您使用什么数据类型来表示控制器级别的日期?

标签: javascript asp.net-mvc-4


【解决方案1】:

这个函数应该可以工作,我知道它需要一些重构,但它可能是一个很好的起点。

function readDate(inputDate) {
            // extract the date that can be parsed by IE ("10/8/2015 6:05:12 PM")
            // and the timezone offset "-07:00"
            var parsedDate = /([\s\S]*?)\s*([+-][0-9\:]+)$/.exec(inputDate);

            //create new date with  "datetimeoffset" string
            var dt = new Date(parsedDate[1]);

            // get millisecs
            var localTime = dt.getTime();

            // get the offset in millisecs
            // notice the conversion to milliseconds
            // the variable "localTzOffset" can be negative 
            // because the standar (http://www.w3.org/TR/NOTE-datetime)
            var localTzOffset = dt.getTimezoneOffset() * 60 * 1000;

            // to get UTC time 
            var utcTime  = localTime + localTzOffset;

            // extract hours and minutes difference 
            // for given timezone
            var parsed  = /([+-][0-9]+)\:([0-9]+)/.exec(parsedDate[2]);
            var hours   = parseInt(parsed[1]);
            var minutes = parseInt(parsed[2]);

            // convert extracted difference to milliseconds
            var tzOffset = Math.abs(hours * 60 * 60 * 1000) + (minutes * 60 * 1000);

            // taking into accout if negative
            tzOffset = hours > 1 ? tzOffset : tzOffset * -1;

            // construct the result Date
            return new Date(utcTime + tzOffset);
}

用法:

var date = readDate("10/8/2015 6:05:12 PM -07:00");

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 2016-07-11
    • 2015-05-21
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    相关资源
    最近更新 更多