如何在 JavaScript 中将字符串转换为 Date 对象?
var st = "date in some format"
var dt = new Date();
var dt_st = // st in Date format, same as dt.
Date -> String
还是 String -> Date
?
var st = "Monday, August 10th 2020"
怎么办?任何和为此?
字符串解析的最佳字符串格式是日期 ISO 格式以及 JavaScript Date 对象构造函数。
ISO 格式示例:YYYY-MM-DD
或 YYYY-MM-DDTHH:MM:SS
。
可是等等!仅使用“ISO 格式”本身并不能可靠地工作。字符串有时被解析为 UTC,有时被解析为本地时间(基于浏览器供应商和版本)。最佳实践应始终将日期存储为 UTC 并将计算作为 UTC。
要将日期解析为 UTC,请附加 Z - 例如:new Date('2011-04-11T10:20:30Z')
。
要以 UTC 显示日期,请使用 .toUTCString()
,
要以用户本地时间显示日期,请使用 .toString()
。
有关 MDN | Date 和 this answer 的更多信息。
对于旧的 Internet Explorer 兼容性(IE 版本小于 9 不支持日期构造函数中的 ISO 格式),您应该将日期时间字符串表示拆分为其部分,然后您可以使用使用日期时间部分的构造函数,例如:new Date('2011', '04' - 1, '11', '11', '51', '00')
。请注意,月份数必须少 1。
替代方法 - 使用适当的库:
您还可以利用库 Moment.js,它允许解析具有指定时区的日期。
不幸的是我发现
var mydate = new Date('2014-04-03'); console.log(mydate.toDateString());
返回“2014 年 4 月 2 日星期三”。我知道这听起来很疯狂,但它发生在某些用户身上。
防弹解决方案如下:
var parts ='2014-04-03'.split('-'); // 请注意月份 (parts[1]); JavaScript 从 0 开始计算月份: // 一月 - 0、二月 - 1 等 var mydate = new Date(parts[0], parts[1] - 1, parts[2]); console.log(mydate.toDateString());
yyyy-MM-dd
格式的日期被解析为 UTC,toString 返回 local 时间,因此取决于用户时区它绝对可以返回不同的结果。如果总是希望时间为 UTC,那么您应该使用 toUTCString。
var [YYYY, MM, DD] = '2014-04-03'.split('-')
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));
输出将是:
dt => Date {Fri Apr 26 2013}
function stringToDate(_date,_format,_delimiter)
{
var formatLowerCase=_format.toLowerCase();
var formatItems=formatLowerCase.split(_delimiter);
var dateItems=_date.split(_delimiter);
var monthIndex=formatItems.indexOf("mm");
var dayIndex=formatItems.indexOf("dd");
var yearIndex=formatItems.indexOf("yyyy");
var month=parseInt(dateItems[monthIndex]);
month-=1;
var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
return formatedDate;
}
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
.indexOf()
方法,因为它在没有 polyfils 的情况下不跨浏览器兼容。相反,使用更兼容的 .match()
或 .test()
vanilla JS 方法。
var _delimiter = _format.match(/\W/g)[0];
可以自动获取分隔符和第 3 个参数的prescind。
mm
是几分钟而不是几个月...在您的格式中使用 MM
建议:我建议使用包含很多格式的日期的包,因为时区和格式时间管理确实是个大问题,moment js解决了很多格式。您可以轻松地将日期从简单的字符串解析为日期,但我认为支持所有格式和日期变体是一项艰巨的工作。
更新:Moment is now deprecated,一个不错的选择是 datefns https://date-fns.org/
moment.js (http://momentjs.com/) 是一个完整且良好的使用日期包,并支持 ISO 8601 strings。
您可以添加字符串日期和格式。
moment("12-25-1995", "MM-DD-YYYY");
您可以检查日期是否有效。
moment("not a real date").isValid(); //Returns false
let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL'))
// output: "3 months ago | February 1, 2019"
请参阅文档 http://momentjs.com/docs/#/parsing/string-format/
let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL'))
输出:“3 个月前 | 2019 年 2 月 1 日”
将其作为参数传递给 Date():
var st = "date in some format"
var dt = new Date(st);
您可以使用例如:dt.getMonth()
访问日期、月份、年份。
console.log(new Date('30-08-2018'))
并得到无效的日期
01/02/2020
执行此操作,它将返回 1st Feburary ,就好像在美国完成相同的事情一样,它将返回 2nd一月。您几乎不应该使用这种幼稚的实现。请改用 moment。
如果您可以使用很棒的 luxon 库,您可以使用例如轻松解析您的日期
var luxonDate = DateTime.fromISO("2014-09-15T09:00:00");
并且可以通过访问 JS 日期对象
luxonDate().toJSDate();
旧答案使用 MomentJS
var momentDate = moment("2014-09-15 09:00:00");
momentDate ().toDate();
对于那些正在寻找一个小巧而智能的解决方案的人:
String.prototype.toDate = function(format)
{
var normalized = this.replace(/[^a-zA-Z0-9]/g, '-');
var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
var formatItems = normalizedFormat.split('-');
var dateItems = normalized.split('-');
var monthIndex = formatItems.indexOf("mm");
var dayIndex = formatItems.indexOf("dd");
var yearIndex = formatItems.indexOf("yyyy");
var hourIndex = formatItems.indexOf("hh");
var minutesIndex = formatItems.indexOf("ii");
var secondsIndex = formatItems.indexOf("ss");
var today = new Date();
var year = yearIndex>-1 ? dateItems[yearIndex] : today.getFullYear();
var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
var day = dayIndex>-1 ? dateItems[dayIndex] : today.getDate();
var hour = hourIndex>-1 ? dateItems[hourIndex] : today.getHours();
var minute = minutesIndex>-1 ? dateItems[minutesIndex] : today.getMinutes();
var second = secondsIndex>-1 ? dateItems[secondsIndex] : today.getSeconds();
return new Date(year,month,day,hour,minute,second);
};
例子:
"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");
只需new Date(st);
假设它是 proper format。
new Date("3/2/20")
怎么样 - 这对您有什么影响?你认为它会为我产生相同的答案吗?除非我们在同一个国家,否则几乎可以肯定不是。正如我所说,这是一个可怕的想法。讽刺并不能使它正确。
new Date('a tomato')
一样有效。 ISO 8601 是一种正确的格式。 3/2/20
不是。
new Date(2000, 10, 1)
将为您提供“2000 年 11 月 1 日星期三 00:00:00 GMT+0100 (CET)”
看到一个月的 0 给你一月
如果要从“dd/MM/yyyy”格式转换。这是一个例子:
var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var arrayDate = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);
此解决方案适用于低于 9 的 IE 版本。
时间戳应转换为数字
var ts = '1471793029764';
ts = Number(ts); // cast it to a Number
var date = new Date(ts); // works
var invalidDate = new Date('1471793029764'); // does not work. Invalid Date
undefined
的值呢?喜欢:var date = new Date(undefined)
?
Date.parse
几乎可以满足您的需求。它在 am
/pm
部分阻塞,但通过一些黑客攻击,您可以让它工作:
var str = 'Sun Apr 25, 2010 3:30pm',
timestamp;
timestamp = Date.parse(str.replace(/[ap]m$/i, ''));
if(str.match(/pm$/i) >= 0) {
timestamp += 12 * 60 * 60 * 1000;
}
表现
今天 (2020.05.08) 我对选择的解决方案进行测试 - 有两种情况:输入日期是 ISO8601 字符串 (Ad,Bd,Cd,Dd,Ed),输入日期是 timestamp (At, Ct, Dt)。解决方案 Bd,Cd,Ct 不返回 js Date 对象作为结果,但我添加它们是因为它们很有用,但我没有将它们与有效的解决方案进行比较。此结果可用于大量日期解析。
结论
对于 ISO 日期和时间戳,所有浏览器的解决方案 new Date (Ad) 比 moment.js (Dd) 快 50-100 倍
解决方案 new Date (Ad) 比 parseDate (Ed) 快约 10 倍
如果我们需要从所有浏览器上的 ISO 日期获取时间戳,解决方案 Date.parse(Bd) 是最快的
https://i.stack.imgur.com/YjDwQ.png
细节
我在 Chrome 81.0、Safari 13.1、Firefox 75.0 上对 MacOs High Sierra 10.13.6 进行了测试。解决方案 parseDate
(Ed) 使用 new Date(0)
并手动设置 UTC 日期组件。
让 ds = '2020-05-14T00:00Z'; // 有效的 ISO8601 UTC 日期 let ts = +'1589328000000'; // 时间戳 let Ad = new Date(ds);让 Bd = Date.parse(ds);让 Cd = 矩(ds);让 Dd = moment(ds).toDate();让 Ed = parseDate(ds);让 At = new Date(ts);让 Ct = 时刻(ts);让 Dt = moment(ts).toDate(); log = (n,d) => console.log(`${n}: ${+d} ${d}`); console.log('来自日期字符串:', ds) log('Ad', Ad);日志('Bd',Bd);日志('镉',镉);日志('Dd',Dd);日志('Ed',Ed); console.log('来自时间戳:', ts) log('At', At);日志('CT',CT);日志('Dt',Dt);函数 parseDate(dateStr) { 让 [年、月、日] = dateStr.split(' ')[0].split('-');让 d=新日期(0); d.setUTCFullYear(年); d.setUTCMonth(month-1); d.setUTCDate(day) 返回 d; } 此片段仅展示使用过的灵魂
铬的结果
https://i.stack.imgur.com/MzeOY.png
转换为 pt-BR 格式:
var dateString = "13/10/2014";
var dataSplit = dateString.split('/');
var dateConverted;
if (dataSplit[2].split(" ").length > 1) {
var hora = dataSplit[2].split(" ")[1].split(':');
dataSplit[2] = dataSplit[2].split(" ")[0];
dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]);
} else {
dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]);
}
我希望能帮助别人!!!
在我看来,这是最好和更简单的解决方案:
只需将您的日期字符串(使用 ISO format)与最后的“T00:00:00”连接并使用 JavaScript Date() constructor,如下例所示。
const dateString = '2014-04-03'
var mydate = new Date(dateString + "T00:00:00");
console.log(mydate.toDateString());
以及关于上述解决方案的一些细节(但可选阅读):
在 ISO 格式中,如果您提供时间并且字符串末尾不存在 Z,则日期将是本地时区而不是 UTC 时区。这意味着,当以这种方式设置日期时,不指定时区,JavaScript 将使用本地浏览器的时区。并且在获取日期时,如果不指定时区,结果也会转换为浏览器的时区。而且,默认情况下,几乎 JavaScript 中的每个日期方法(除了一个)都会为您提供本地时区的日期/时间(如果您指定 UTC,您只会获得 UTC)。因此,在本地/浏览器时区中使用您可能不会得到不需要的结果,因为您的本地/浏览时区和 UTC 时区之间存在差异,这是日期字符串转换的主要抱怨之一。但是,如果您将使用此解决方案,请了解您的上下文并了解您在做什么。还要注意在日期时间字符串中省略 T 或 Z 会在不同的浏览器中产生不同的结果。
需要注意的是,上面的示例将为您提供与下面的示例完全相同的回报,这是该问题中投票第二多的答案:
var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]);
console.log(mydate.toDateString());
主要区别在于,此处提供的第一个示例比第二个示例更简单,甚至更防错(至少在我看来,如下所述)。
因为如果您仅使用 ISO 格式的一个日期字符串参数调用 JavaScript Date() constructor 日期(第一个示例),它不接受超出其逻辑限制的值(因此,如果您将 13 作为月或 32 作为日,您会得到失效日期)。
但是,当您使用具有多个日期参数的相同构造函数时(第二个示例),超出其逻辑限制的参数将调整为相邻值 and you won't get Invalid Date Error(因此,如果您将 13 作为月份,它将调整为 1,而不是给你一个无效的日期)。
或者另一种(和第三种)解决方案将两者混合使用,使用第一个示例来验证日期字符串,如果它有效,则使用第二个示例(这样可以避免浏览器可能与第一个示例不一致,同时避免参数的权限高于第二个例子的逻辑限制)。
像这样(也接受部分日期):
function covertStringToDate(dateString) {
//dateString should be in ISO format: "yyyy-mm-dd", "yyyy-mm" or "yyyy"
if(new Date(dateString).toString() === "Invalid Date") {
return false
} else {
const onlyNumbers = dateString.replace(/\D/g, "");
const year = onlyNumbers.slice(0,4)
const month = onlyNumbers.slice(4,6)
const day = onlyNumbers.slice(6,8)
if(!month){
return(new Date(year))
} else if (!day) {
return(new Date(year, month - 1))
} else {
return(new Date(year, month - 1, day))
}
}
}
第四种选择(也是最后的建议)是使用适当的第三个库(如 moment 或 date-fns)
参考:
https://www.w3schools.com/js/js_date_formats.asp
https://css-tricks.com/everything-you-need-to-know-about-date-in-javascript/
https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Date#parameters
我为此创建了一个小提琴,您可以在任何日期字符串上使用 toDate() 函数并提供日期格式。这将返回一个 Date 对象。 https://jsfiddle.net/Sushil231088/q56yd0rp/
"17/9/2014".toDate("dd/MM/yyyy", "/")
对于在 js 中将字符串转换为日期,我使用 http://momentjs.com/
moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm
moment().format('dddd'); // Sunday
moment().format("MMM Do YY"); // Aug 16th 15
moment().format('YYYY [escaped] YYYY'); // 2015 escaped 2015
moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow(); // 16 hours ago
moment().endOf('day').fromNow(); // in 8 hours
我制作了这个函数来将任何 Date 对象转换为 UTC Date 对象。
function dateToUTC(date) {
return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}
dateToUTC(new Date());
你可以试试这个:
函数 formatDate(userDOB) { const dob = new Date(userDOB); const monthNames = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月' ' ];常量天 = dob.getDate();常量月索引 = dob.getMonth();常量年 = dob.getFullYear(); // 返回日期 + ' ' + monthNames[monthIndex] + ' ' + year;返回`${day} ${monthNames[monthIndex]} ${year}`; } console.log(formatDate('1982-08-10'));
此答案基于 Kassem 的 answer,但它也处理两位数年份。我提交了对 Kassem 答案的编辑,但如果它没有被批准,我也会将其作为单独的答案提交。
function stringToDate(_date,_format,_delimiter) {
var formatLowerCase=_format.toLowerCase();
var formatItems=formatLowerCase.split(_delimiter);
var dateItems=_date.split(_delimiter);
var monthIndex=formatItems.indexOf("mm");
var dayIndex=formatItems.indexOf("dd");
var yearIndex=formatItems.indexOf("yyyy");
var year = parseInt(dateItems[yearIndex]);
// adjust for 2 digit year
if (year < 100) { year += 2000; }
var month=parseInt(dateItems[monthIndex]);
month-=1;
var formatedDate = new Date(year,month,dateItems[dayIndex]);
return formatedDate;
}
stringToDate("17/9/14","dd/MM/yyyy","/");
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
还有另一种方法:
String.prototype.toDate = function(format) {
format = format || "dmy";
var separator = this.match(/[^0-9]/)[0];
var components = this.split(separator);
var day, month, year;
for (var key in format) {
var fmt_value = format[key];
var value = components[key];
switch (fmt_value) {
case "d":
day = parseInt(value);
break;
case "m":
month = parseInt(value)-1;
break;
case "y":
year = parseInt(value);
}
}
return new Date(year, month, day);
};
a = "3/2/2017";
console.log(a.toDate("dmy"));
// Date 2017-02-03T00:00:00.000Z
var date = new Date(year, month, day);
或者
var date = new Date('01/01/1970');
'01-01-1970' 格式的日期字符串在 FireFox 中不起作用,因此最好在日期格式字符串中使用“/”而不是“-”。
如果您需要在转换为日期格式之前检查字符串的内容:
// Convert 'M/D/YY' to Date()
mdyToDate = function(mdy) {
var d = mdy.split(/[\/\-\.]/, 3);
if (d.length != 3) return null;
// Check if date is valid
var mon = parseInt(d[0]),
day = parseInt(d[1]),
year= parseInt(d[2]);
if (d[2].length == 2) year += 2000;
if (day <= 31 && mon <= 12 && year >= 2015)
return new Date(year, mon - 1, day);
return null;
}
我创建了 parseDateTime 函数来将字符串转换为日期对象,它在所有浏览器(包括 IE 浏览器)中都有效,请检查是否有人需要,参考 https://github.com/Umesh-Markande/Parse-String-to-Date-in-all-browser
function parseDateTime(datetime) {
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
if(datetime.split(' ').length == 3){
var date = datetime.split(' ')[0];
var time = datetime.split(' ')[1].replace('.00','');
var timearray = time.split(':');
var hours = parseInt(time.split(':')[0]);
var format = datetime.split(' ')[2];
var bits = date.split(/\D/);
date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
var day = date.getDate();
var monthIndex = date.getMonth();
var year = date.getFullYear();
if ((format === 'PM' || format === 'pm') && hours !== 12) {
hours += 12;
try{ time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] }
}
var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + ' ' + year + ' ' + time);
return formateddatetime;
}else if(datetime.split(' ').length == 2){
var date = datetime.split(' ')[0];
var time = datetime.split(' ')[1];
var bits = date.split(/\D/);
var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
var day = datetimevalue.getDate();
var monthIndex = datetimevalue.getMonth();
var year = datetimevalue.getFullYear();
var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + ' ' + year + ' ' + time);
return formateddatetime;
}else if(datetime != ''){
var bits = datetime.split(/\D/);
var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
return date;
}
return datetime;
}
var date1 = '2018-05-14 05:04:22 AM'; // yyyy-mm-dd hh:mm:ss A
var date2 = '2018/05/14 05:04:22 AM'; // yyyy/mm/dd hh:mm:ss A
var date3 = '2018/05/04'; // yyyy/mm/dd
var date4 = '2018-05-04'; // yyyy-mm-dd
var date5 = '2018-05-14 15:04:22'; // yyyy-mm-dd HH:mm:ss
var date6 = '2018/05/14 14:04:22'; // yyyy/mm/dd HH:mm:ss
console.log(parseDateTime(date1))
console.log(parseDateTime(date2))
console.log(parseDateTime(date3))
console.log(parseDateTime(date4))
console.log(parseDateTime(date5))
console.log(parseDateTime(date6))
**Output---**
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time)
Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time)
您可以使用正则表达式将字符串解析为详细时间,然后创建日期或任何返回格式,例如:
//example : let dateString = "2018-08-17 01:02:03.4"
function strToDate(dateString){
let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/
, [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateString)
, dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds);
return dateObject;
}
alert(strToDate(dateString));
与标准一样出色的 ISO 8601 式日期字符串仍未得到广泛支持。
这是一个很好的资源,可以帮助您确定应该使用哪种日期字符串格式:
http://dygraphs.com/date-formats.html
是的,这意味着您的日期字符串可能与
"2014/10/13 23:57:52"
而不是 "2014-10-13 23:57:52"
//little bit of code for Converting dates
var dat1 = document.getElementById('inputDate').value;
var date1 = new Date(dat1)//converts string to date object
alert(date1);
var dat2 = document.getElementById('inputFinishDate').value;
var date2 = new Date(dat2)
alert(date2);
使用此代码:(我的问题已通过此代码解决)
function dateDiff(date1, date2){
var diff = {} // Initialisation du retour
var tmp = date2 - date1;
tmp = Math.floor(tmp/1000); // Nombre de secondes entre les 2 dates
diff.sec = tmp % 60; // Extraction du nombre de secondes
tmp = Math.floor((tmp-diff.sec)/60); // Nombre de minutes (partie entière)
diff.min = tmp % 60; // Extraction du nombre de minutes
tmp = Math.floor((tmp-diff.min)/60); // Nombre d'heures (entières)
diff.hour = tmp % 24; // Extraction du nombre d'heures
tmp = Math.floor((tmp-diff.hour)/24); // Nombre de jours restants
diff.day = tmp;
return diff;
}
我编写了一个可重用函数,当我从服务器获取日期字符串时使用它。
您可以传递所需的分隔符(/ - 等)来分隔日月和年,以便使用 split()
方法。
你可以看到 &在此 working example 上进行测试。
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<div>
<span>day:
</span>
<span id='day'>
</span>
</div>
<div>
<span>month:
</span>
<span id='month'>
</span>
</div>
<div>
<span>year:
</span>
<span id='year'>
</span>
</div>
<br/>
<input type="button" id="" value="convert" onClick="convert('/','28/10/1980')"/>
<span>28/10/1980
</span>
<script>
function convert(delimiter,dateString)
{
var splitted = dateString.split('/');
// create a new date from the splitted string
var myDate = new Date(splitted[2],splitted[1],splitted[0]);
// now you can access the Date and use its methods
document.getElementById('day').innerHTML = myDate.getDate();
document.getElementById('month').innerHTML = myDate.getMonth();
document.getElementById('year').innerHTML = myDate.getFullYear();
}
</script>
</body>
</html>
new Date('2011-04-11T11:51:00')
,则创建日期有效。new Date('1970-30-02')
是无效的日期,因为一年没有 30 个月。您不能溢出月份,但是当您溢出天数时,它会在 Chrome 和 Firefox 中解析为有效日期:new Date('1970-02-30')
与 new Date(' 1970-03-02')。