Date(dateString)和new Date(dateString)之间的区别
我有一些代码试图parsing一个datestring。
当我确实alert(Date("2010-08-17 12:09:36"));
它正确地分析date和一切工作正常,但我不能调用与Date
相关的方法,如getMonth()
。
当我尝试:
var temp = new Date("2010-08-17 12:09:36"); alert(temp);
我收到“无效date”错误。
任何想法如何parsing“2010-08-17 12:09:36”与新的date()?
date()
有了这个,你可以调用一个名为Date()
的函数。 它不接受任何参数,并返回表示当前date和时间的string。
新date()
有了这个,你正在创build一个新的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)
使用这些格式之一:
- “1975年10月13日11:13:00”
- “1975年10月13日11:13”
- “1975年10月13日”
以下格式适用于所有浏览器:
new Date("2010/08/17 12:09:36");
因此,要使yyyy-mm-dd hh:mm:ss
格式化的datestring与浏览器完全兼容,您将不得不用斜线replace破折号:
var dateString = "2010-08-17 12:09:36"; new Date(dateString.replace(/-/g, "/"));
不同的是,事实上(如果我从ECMA文档中记得)是Date("xx")
不创build(在某种意义上)一个新的date对象(实际上它相当于调用( new Date("xx").toString()
)。而new Date("xx")
实际上会创build一个新的date对象。
了解更多信息:
看http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf的; 15.9.2
我知道这是旧的,但到目前为止,更简单的解决scheme就是使用
var temp = new Date("2010-08-17T12:09:36");
正确的使用方法Date: 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
任何想法如何parsing“2010-08-17 12:09:36”与新的date()?
在ES5之前,没有浏览器需要支持的string格式,尽pipe有一些被广泛支持的数字。 然而浏览器的支持是不可靠的不一致的,例如一些会允许超出界限的值,另一些则不允许,有些支持某些格式,有些则不支持,等等。
ES5引入了对一些ISO 8601格式的支持,但OP不符合ISO 8601标准,并且所有使用的浏览器都不支持它。
唯一可靠的方法是使用一个小的parsing函数。 以下分析OP中的格式并validation值。
/* 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, eg "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 );
您没有收到“无效date”错误。 相反,临时值是“无效date”。
你的datestring是否有效? 如果您使用Firefox,请检查Date.parse
在Firefox的JavaScript控制台:
>>> Date.parse("2010-08-17 12:09:36"); NaN >>> Date.parse("Aug 9, 1995") 807944400000
我会尝试不同的datestring格式。
Zebi,你使用Internet Explorer吗?
我遇到了同样的问题,使用以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();
我最近遇到了这个,这是一个有用的职位。 我把上面的Topera进一步说了一遍,在Chrome和Firefox中都适用于我:
var temp = new Date( Date("2010-08-17 12:09:36") ); alert(temp);
对Date()
的内部调用返回一个new Date()
可以parsing的string。