2016-06-09 142 views
0

我有一个从php中检索的变量,存储在一个名为activity.ActivityDate的变量中。当我做一个将字符串日期转换为日期对象

console.log(activity.ActivityDate); 

它输出14/06/2016,这是可被转化为一个日期对象的有效格式。但是当我做

d = new Date(activity.ActivityDate); 
console.log(d); 

我得到一个无效的日期。但是当我做

e = new Date('14/06/2016'); 
console.log(e); 

我确实得到一个适当的日期对象。

我的activity.ActivityDate字符串有什么问题,或者有什么方法将它变成合适的字符串?

+1

如何:'当d =新日期(activity.ActivityDate.toString());' – Hackerman

+1

在'日期的datestring()'构造期望一个特定的格式,它可以依赖于浏览器。例如,虽然未在Chrome中定义“MM/DD/YYYY”,但“DD/MM/YYYY”为。你最好分割字符串中的值,并将它们作为整数放在'new Date(year,month [,day [...)''的适当字段中。 –

+0

@Hackerman仍然无效日期 – Lester

回答

3

不同的浏览器可以用不同的方式解析日期字符,正如MDN所指出的那样,它不鼓励使用Date()构造函数来解析日期字符串。在你的情况下,你的格式为DD/MM/YYYY,但它可能是你的浏览器预计MM/DD/YYYY

注意:由于浏览器的差异和不一致性,强烈建议不要使用Date构造函数(和Date.parse,它们是等价的)解析日期字符串。

最好的办法这样做,它会在所有的浏览器将洒您的字符串通过"/"和转换您的数字为整数使用构造格式为Date(year, month, day)构造函数。

例如:

var date = '14/06/2016'; 
 
var items = date.split('/'); 
 
var day = +items[0];   // Note +(item) means convert to interger 
 
var month= +(items[1] - 1);  // month goes from 0-11 rather than 1-12. 
 
var year = +items[2]; 
 
e = new Date(year, month, day); 
 
console.log(e);