如何在javascript中从字符串创建日期对象

时间:2011-11-22 09:23:39

标签: javascript string date

拥有此字符串30/11/2011。我想将它转换为日期对象。

我需要使用:

Date d = new Date(2011,11,30);   /* months 1..12? */

Date d = new Date(2011,10,30);   /* months 0..11? */

8 个答案:

答案 0 :(得分:219)

var d = new Date(2011,10,30);

月份从js中的0开始索引。

答案 1 :(得分:68)

你肯定想要使用第二个表达式,因为JS中的月份是从0开始枚举的。

您也可以使用Date.parse方法,但它使用不同的日期格式:

var d = Date.parse("11/30/2011");

答案 2 :(得分:50)

语法如下:

new Date(year, month [, day, hour, minute, second, millisecond ])

所以

Date d = new Date(2011,10,30);

是正确的;日,小时,分钟,秒,毫秒是可选的。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

答案 3 :(得分:49)

如上所述,有多种创建日期的方法。我不会重复同样的事情。这是在Java Script中将String转换为Date的小方法,如果这是您正在寻找的,

function compareDate(str1){
// str1 format should be dd/mm/yyyy. Separator can be anything e.g. / or -. It wont effect
var dt1   = parseInt(str1.substring(0,2));
var mon1  = parseInt(str1.substring(3,5));
var yr1   = parseInt(str1.substring(6,10));
var date1 = new Date(yr1, mon1-1, dt1);
return date1;
}

答案 4 :(得分:27)

很简单:

var dt=new Date("2011/11/30");

日期应为ISO格式yyyy / MM / dd。

答案 5 :(得分:11)

首先像这样提取字符串

var dateString = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);

然后,

var d = new Date( dateString[3], dateString[2]-1, dateString[1] );

答案 6 :(得分:7)

总是,对于实际的JavaScript规范的任何问题,我强烈推荐Mozilla Developer Networktheir JavaScript reference

正如它在the topic of the Date object中所说的关于您使用的参数变体:

new Date(year, month, day [, hour, minute, second, millisecond ])

关于月份参数:

  

表示月份的整数值,从1月份的0开始到12月份的11月。

显然,你应该使用11月的10号月份。

P.S。:我推荐MDN的原因是对事物,示例和浏览器兼容性图表的正确性,良好解释。

答案 7 :(得分:1)

我无法相信javascript与解析日期不一致。当没有时区从UTC变为本地时,我听到默认值 - 希望网络准备就绪;)

在解析日期时,我更喜欢让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;
}

我们需要一个日期对象;所以创造。如果有时区,我们就完成了。否则,使用+ hh:mm格式创建一个本地时区字符串(比+ hhmm更接受)。