有这个字符串30/11/2011。我想把它转换成日期对象。
我是否需要使用:
Date d = new Date(2011,11,30); /* months 1..12? */
or
Date d = new Date(2011,10,30); /* months 0..11? */
?
有这个字符串30/11/2011。我想把它转换成日期对象。
我是否需要使用:
Date d = new Date(2011,11,30); /* months 1..12? */
or
Date d = new Date(2011,10,30); /* months 0..11? */
?
当前回答
var d = new Date(2011,10,30);
js中的月份索引从0开始。
其他回答
总是,对于任何关于JavaScript规范的实际问题,我强烈推荐Mozilla开发者网络和他们的JavaScript参考。
它在Date对象的主题中声明了您使用的参数变量:
new Date(year, month, day [, hour, minute, second, millisecond ])
关于months参数:
month表示月份的整数值,1月从0开始,12月从11开始。
显然,你应该用数字10来表示11月。
附注:我推荐MDN的原因是它的正确性、对事物的良好解释、示例和浏览器兼容性图表。
非常简单:
var dt=new Date("2011/11/30");
日期的ISO格式为yyyy/MM/dd。
你肯定想使用第二个表达式,因为JS中的月份是从0开始枚举的。
你也可以使用Date。解析方法,但它使用不同的日期格式:
var timestamp = Date.parse("11/30/2011");
var dateObject = new Date(timestamp);
var d = new Date(2011,10,30);
js中的月份索引从0开始。
我真不敢相信javascript和解析日期不一致。我听说当没有时区时,默认会从UTC改为本地-希望web准备好了;)
当涉及到解析日期时,我更喜欢让Javascript来做繁重的工作。不过,如果能相当透明地处理本地时区问题就好了。考虑到这两点,这里有一个函数来处理当前的现状——当Javascript发生变化时,它仍然可以工作,但随后可以被删除(当然,有一点时间让人们赶上旧的浏览器/nodejs)。
function strToDate(dateStr)
{
var dateTry = new Date(dateStr);
if (!dateTry.getTime())
{
throw new Exception("Bad Date! dateStr: " + dateStr);
}
var tz = dateStr.trim().match(/(Z)|([+-](\d{2})\:?(\d{2}))$/);
if (!tz)
{
var newTzOffset = dateTry.getTimezoneOffset() / 60;
var newSignStr = (newTzOffset >= 0) ? '-' : '+';
var newTz = newSignStr + ('0' + Math.abs(newTzOffset)).slice(-2) + ':00';
dateStr = dateStr.trim() + newTz;
dateTry = new Date(dateStr);
if (!dateTry.getTime())
{
throw new Exception("Bad Date! dateStr: " + dateStr);
}
}
return dateTry;
}
无论如何,我们都需要一个date对象;所以createone。如果有一个时区,我们就完成了。否则,使用+hh:mm格式(比+hhmm更容易接受)创建本地时区字符串。