JavaScript 将长日期格式转换为 mm/dd/yyy

JavaScript convert long date format to mm/dd/yyy

本文关键字:mm dd yyy 转换 日期 格式 JavaScript      更新时间:2023-09-26

我有以下代码将JavaScript中的长日期格式转换为mm/dd/yyyy。当 newValu 从控制台日志中变为"日期 2016-12-29T00:00:00.000Z"时,date_str有一天回到过去,变成"12/28/2016"。不确定是什么导致了问题。如果我们将 d(天)递增 1,那将不起作用,因为如果 d = 31,我们可能需要增加月份。

                        console.log(newValue);
                        var date = newValue;
                        var d = date.getDate();
                        var m = date.getMonth() + 1;
                        var y = date.getFullYear();
                        date_str =  (m<=9 ? '0' + m : m) + '/' + (d <= 9 ? '0' + d : d) + "/" + y;

这里有一个提示:

    function change(date) {
        var r = String(date).match(/^'s*([0-9]+)'s*-'s*([0-9]+)'s*-'s*([0-9]+)(.*)$/);
        return r[2] + "-" + r[3] + "-" + r[1] + r[4];
    }

此函数将返回"mm/dd/yyyy"。

不确定是什么导致了问题。

如果 newValue 是一个 Date 对象,并且在打印到控制台时得到"2016-12-29T00:00:00.000Z",请注意这是 GMT

如果主机系统的时区在 GMT 以西(例如 -0400),则等效日期将为"2016-12-28T20:00:00.000Z",即提前 4 小时(和前一天)。当你使用普通的获取方法(getDate,getHours,getMinutes等)时,你得到的就是这些值。

因此,您的日期字符串对于主机系统的时区是正确的。

var x = new Date('2016-12-29T00:00:00.000Z');
// Local equivalent on your host system
document.write(x);
// UTC values in ISO 8601 format
document.write('<br>' + x.toISOString());
// Date string from ISO parts
document.write('<br>'+ ('0'+(x.getUTCMonth()+1)).slice(-2) + '-' +
               ('0'+x.getUTCDate()).slice(-2) + '-'  +
               x.getUTCFullYear() );

如果希望日期字符串中的值与 Date 对象的 UTC 值匹配,请使用 UTC 方法:

var d = date.getUTCDate();
var m = date.getUTCMonth() + 1;
var y = date.getUTCFullYear();