我有一些尝试解析日期字符串的代码。
当我做alert(Date("2010-08-17 12:09:36"));
它正确解析日期和一切工作正常,但我不能把相关联的方法Date
,像getMonth()
。
当我尝试:
var temp = new Date("2010-08-17 12:09:36");
alert(temp);
我收到“无效日期”错误。
关于如何使用 new Date() 解析“2010-08-17 12:09:36”的任何想法?
我有一些尝试解析日期字符串的代码。
当我做alert(Date("2010-08-17 12:09:36"));
它正确解析日期和一切工作正常,但我不能把相关联的方法Date
,像getMonth()
。
当我尝试:
var temp = new Date("2010-08-17 12:09:36");
alert(temp);
我收到“无效日期”错误。
关于如何使用 new Date() 解析“2010-08-17 12:09:36”的任何想法?
日期()
有了这个,你可以调用一个名为Date()
. 它不接受任何参数并返回一个表示当前日期和时间的字符串。
新日期()
有了这个,您将创建一个新的 Date 实例。
您只能使用以下构造函数:
new Date() // current date and time
new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)
因此,2010-08-17 12:09:36
不允许用作构造函数的参数。
编辑:new Date(dateString)
使用以下格式之一:
以下格式适用于所有浏览器:
new Date("2010/08/17 12:09:36");
因此,要使yyyy-mm-dd hh:mm:ss
格式化的日期字符串与浏览器完全兼容,您必须用斜杠替换破折号:
var dateString = "2010-08-17 12:09:36";
new Date(dateString.replace(/-/g, "/"));
我知道这是旧的,但到目前为止更简单的解决方案是使用
var temp = new Date("2010-08-17T12:09:36");
不同之处在于(如果我从 ECMA 文档中回忆)Date("xx")
它不会创建(在某种意义上)一个新的日期对象(实际上它相当于调用 ( new Date("xx").toString()
))。而new Date("xx")
实际上会创建一个新的日期对象。
想要查询更多的信息:
查看http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf 的15.9.2
关于如何使用 new Date() 解析“2010-08-17 12:09:36”的任何想法?
在 ES5 之前,没有要求浏览器支持的字符串格式,尽管有一些被广泛支持的数字。然而,浏览器支持是不可靠和不一致的,例如有些会允许越界值而有些则不会,有些支持某些格式而有些则不支持,等等。
ES5 引入了对某些 ISO 8601 格式的支持,但是 OP 不符合 ISO 8601 并且并非所有使用的浏览器都支持它。
唯一可靠的方法是使用一个小的解析函数。下面解析 OP 中的格式并验证值。
/* Parse date string in format yyyy-mm-dd hh:mm:ss
** If string contains out of bounds values, an invalid date is returned
**
** @param {string} s - string to parse, e.g. "2010-08-17 12:09:36"
** treated as "local" date and time
** @returns {Date} - Date instance created from parsed string
*/
function parseDateString(s) {
var b = s.split(/\D/);
var d = new Date(b[0], --b[1], b[2], b[3], b[4], b[5]);
return d && d.getMonth() == b[1] && d.getHours() == b[3] &&
d.getMinutes() == b[4]? d : new Date(NaN);
}
document.write(
parseDateString('2010-08-17 12:09:36') + '<br>' + // Valid values
parseDateString('2010-08-45 12:09:36') // Out of bounds date
);