我有以下代码将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;
答案 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 等)时,它会使用它们你正在获得这些价值。
因此,您的日期字符串对于主机系统的时区是正确的。
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;
如果希望日期字符串中的值与Date对象的UTC值匹配,则使用UTC方法:
var d = date.getUTCDate();
var m = date.getUTCMonth() + 1;
var y = date.getUTCFullYear();