日期格式化在Chrome中提供的结果与其他浏览器不同?

时间:2016-02-14 10:59:47

标签: javascript date

我想以可读格式显示时间。所以我使用下面的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;
    }

3 个答案:

答案 0 :(得分:1)

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

Javascript Date issue

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

DateTime UTC

答案 1 :(得分:1)

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

通过指定时区,使其明确无误。改变

socket.on(...)

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

答案 2 :(得分: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;
    }