我有一些代码试图解析日期字符串。
当我alert(Date("2010-08-17 12:09:36"));
时
它正确地解析了日期,一切正常但我无法调用与Date
相关联的方法,如getMonth()
。
当我尝试:
var temp = new Date("2010-08-17 12:09:36");
alert(temp);
我收到“无效日期”错误。
有关如何使用新Date()解析“2010-08-17 12:09:36”的任何想法?
答案 0 :(得分:59)
<强>日期()强>
通过此操作,您可以调用名为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
作为构造函数的参数。
请参阅w3schools。
编辑:new Date(dateString)
使用以下格式之一:
答案 1 :(得分:36)
以下格式适用于所有浏览器:
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, "/"));
答案 2 :(得分:4)
我知道这已经过时了,但到目前为止,更简单的解决方案就是使用
var temp = new Date("2010-08-17T12:09:36");
答案 3 :(得分:3)
不同之处在于(如果我记得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答案 4 :(得分:2)
关于如何解析的任何想法&#34; 2010-08-17 12:09:36&#34;新的日期()?
在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
);
&#13;
答案 5 :(得分:1)
正确使用日期的方式:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
此外,下面的代码显示了如何使用函数“Animal”的单个定义,它可以是a)直接调用,b)通过将其视为构造函数来实例化
function Animal(){
this.abc = 1;
return 1234;
}
var x = new Animal();
var y = Animal();
console.log(x); //prints object containing property abc set to value 1
console.log(y); // prints 1234
答案 6 :(得分:1)
您还可以创建单个 Date
对象并使用静态函数 Date.now()
更新它:
<!doctype html>
<html> <head></head>
<body>
<h1 id="datetime"></h1>
<script>
elem_datetime = document.getElementById('datetime');
var date = new Date();
function sometimer()
{
setTimeout(sometimer, 1*1000); // wait 1 second and call again
date.setTime(Date.now());
elem_datetime.innerHTML = date.toDateString() + ' ' + date.toLocaleTimeString();
}
sometimer();
</script>
</body>
</html>
答案 7 :(得分:0)
您没有收到“无效日期”错误。 相反,temp的值是“无效日期”。
您的日期字符串是否为有效格式? 如果您使用的是Firefox,请检查Date.parse
在Firefox javascript控制台中:
>>> Date.parse("2010-08-17 12:09:36");
NaN
>>> Date.parse("Aug 9, 1995")
807944400000
我会尝试不同的日期字符串格式。
Zebi,您使用的是Internet Explorer吗?
答案 8 :(得分:0)
我使用以ISO 8601格式回复的API调用遇到了同样的问题。 在Chrome中工作这有效: `
// date variable from an api all in ISO 8601 format yyyy-mm-dd hh:mm:ss
var date = oDate['events']['event'][0]['start_time'];
var eventDate = new Date();
var outputDate = eventDate.toDateString();
`
但这不适用于firefox。
上面的回答帮我格式化了firefox:
// date variable from an api all in ISO 8601 format yyyy-mm-dd hh:mm:ss
var date = oDate['events']['event'][0]['start_time'];
var eventDate = new Date(date.replace(/-/g,"/");
var outputDate = eventDate.toDateString();
答案 9 :(得分:-2)
我最近也碰到了这个,这是一个有用的帖子。我将上面的Topera更进了一步,这对我来说都适用于chrome和firefox:
var temp = new Date( Date("2010-08-17 12:09:36") );
alert(temp);
对Date()
的内部调用会返回new Date()
可以解析的字符串。