【问题标题】:Date formating gives different results in Chrome than in other browsers?日期格式在 Chrome 中的结果与在其他浏览器中不同?
【发布时间】:2016-02-14 10:59:46
【问题描述】:

我想以可读的格式显示时间。所以我使用下面的js代码。但是在 Chrome 和 IE 中的输出是不同的。如何更改代码以在所有浏览器中提供相同的输出?

IE 中的输出:上午 12:46

在 Chrome 中:上午 6 点 16 分

时区为:UTC +05:30

    var unReadableDate = "2016-01-25T00:46:00";
    var newDate = new Date(unReadableDate);
    //var timeZoneOffset = (new Date()).getTimezoneOffset();
    //newDate.setMinutes(newDate.getMinutes() - timeZoneOffset);
    alert(formatAMPM(newDate));

    //below function formats time in am and pm
    function formatAMPM(date) {
        var hours = date.getHours();
        var minutes = date.getMinutes();
        var ampm = hours >= 12 ? 'pm' : 'am';
        hours = hours % 12;
        hours = hours ? hours : 12; // the hour '0' should be '12'
        minutes = minutes < 10 ? '0' + minutes : minutes;
        var strTime = hours + ':' + minutes + ' ' + ampm;
        return strTime;
    }

【问题讨论】:

  • 对我来说,Chrome 输出 1:46 am。问题可能与用户时区有关。顺便说一句,Firefox 也会输出12:46 am
  • 不要使用 Date 构造函数解析字符串,它是不可靠的(正如您所发现的)。没有时区的 ISO 8601 日期时间字符串应被视为本地(即考虑系统时区偏移),但有些浏览器不会,有些则根本不会解析它。手动解析字符串,只需要两行函数或库。

标签: javascript date


【解决方案1】:

你能换个试试吗

var unReadableDate = "2012-06-25T00:46:00.000Z"
    var newDate = new Date(unReadableDate);
    //var timeZoneOffset = (new Date()).getTimezoneOffset();
    //newDate.setMinutes(newDate.getMinutes() - timeZoneOffset);
    alert(formatAMPM(newDate));

    //below function formats time in am and pm
    function formatAMPM(date) {
        var hours = date.getHours();
        var minutes = date.getMinutes();
        var ampm = hours >= 12 ? 'pm' : 'am';
        hours = hours % 12;
        hours = hours ? hours : 12; // the hour '0' should be '12'
        minutes = minutes < 10 ? '0' + minutes : minutes;
        var strTime = hours + ':' + minutes + ' ' + ampm;
        return strTime;
    }

【讨论】:

  • 是的.. 这行得通.. 它在 Chrome 和 IE 中给出相同的结果
  • 好。如果您认为这是正确的答案,请采纳。谢谢
【解决方案2】:

使用 Javascript Date 构造函数将 UTC 格式字符串转换为日期并不可靠。如果你想解决日期的时区问题,你应该使用 moment.js。要了解更多信息,您可以使用以下链接。

Javascript Date issue

解决问题的简单方法是在日期中传递单个参数,而不是完整的字符串。要了解更多信息,您可以使用以下链接

DateTime UTC

【讨论】:

  • 唯一明智的答案。
【解决方案3】:

您的问题是您的日期字符串被视为本地时间而不是被视为 UTC。

只需指定时区即可明确。改变

var unReadableDate = "2016-01-25T00:46:00";

var unReadableDate = "2016-01-25T00:46:00Z";

【讨论】:

  • 感谢您的回答。但解决方案不起作用
  • 奇怪(我在 IE11 和 Chrome 中尝试过)。您是否尝试过使用不同的构造函数指定日期对象(比如new Date(2016, 1, 25, 0, 46, 0)
  • 查看 Nitin Garg 的回答。不要使用 Date 构造函数解析字符串。
猜你喜欢
  • 2016-09-08
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
相关资源
最近更新 更多