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

时间:2016-04-27 22:42:34

标签: javascript date datetime

我有以下代码将JavaScript中的长日期格式转换为mm / dd / yyyy。当newValu是来自控制台日志的“Date 2016-12-29T00:00:00.000Z”时,date_str返回一天,变为“12/28/2016”。不确定导致问题的原因。如果我们将d(day)递增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;

2 个答案:

答案 0 :(得分:0)

这里有一个提示:

    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];
    }

此功能将返回&#34; mm / dd / yyyy&#34;。

答案 1 :(得分:0)

  

不确定导致问题的原因。

如果 newValue 是一个Date对象,当打印到控制台时,您会得到&#34; 2016-12-29T00:00:00.000Z&#34;,请注意 GMT

如果主机系统的格林威治标准时间以西(例如-0400),则等效日期为&#34; 2016-12-28T20:00:00.000Z&#34;,即提前4小时(及前一天)。当您使用普通的 get 方法( getDate getHours getMinutes 等)时,它会使用它们你正在获得这些价值。

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

&#13;
&#13;
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() );
&#13;
&#13;
&#13;

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

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