JavaScript返回时间不正确

时间:2014-01-09 06:03:12

标签: javascript

我正在开发移动应用程序并构建我正在使用以下日期字符串的日期对象。但是我需要输出的时间字符串比输入时间更奇怪。

输入时间:

2014-01-09T20:40:00

输出时间:

  10th January, 2:10am 

构建日期对象我正在使用以下代码

var date = new Date('2014-01-09T20:40:00');

Dates.getAMPMTimeFromDateObject = function (date) {
            var dateSuffix = Constants.Formatting.DateAMSuffix,
                hours = date.getHours(),
                minutes = date.getMinutes(),
                minutesString;

            hours = (hours + 24) % 24;

            if (hours === 0) {
                hours = 12;
            } else if (hours > 12) {
                hours = hours % 12;
                dateSuffix = Constants.Formatting.DatePMSuffix;
            } else if (hours === 12) { //This is specific fix for 12PM exceptional case
                dateSuffix = Constants.Formatting.DatePMSuffix;
            }

            minutesString = (minutes < 10) ? '0' + minutes : minutes;

            return hours + ':' + minutesString + dateSuffix;
        };

2 个答案:

答案 0 :(得分:2)

您的问题很可能是由于时区造成的。您所在的国家/地区是half-hour timezone offset吗?

您的输出时间使用当前区域设置清晰显示。

换句话说,你的约会没有错!您需要考虑如何处理代码中的时区。

通常,请确保您的代码中的日期为GMT,在解析/序列化日期时使用ISO date/time format,并在向用户显示时仅将日期转换为特定时区。

答案 1 :(得分:1)

您绝对需要为ISO日期字符串指定时区。这是跨浏览器兼容性问题。

如果您未指定时区:

  • Chrome假设您的输入为UTC
  • Firefox / IE假设您的输入是本地的

快速解决方法是明确使用UTC:

var date = new Date('2014-01-09T20:40:00Z'); //note 'Z' for "zero-offset"

但是,旧版浏览器甚至不了解ISO日期/时间输入,因此请谨慎使用。

日期/时间字符串兼容性的便捷参考:http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html