有这个字符串30/11/2011。我想把它转换成日期对象。

我是否需要使用:

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

or

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

?


当前回答

我真不敢相信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更容易接受)创建本地时区字符串。

其他回答

我真不敢相信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更容易接受)创建本地时区字符串。

非常简单:

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

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

如上所述,有多种创建日期的方法。我不会重复同样的事情。这里是一个小方法转换字符串到日期在Java脚本,如果这是你正在寻找的,

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;
}

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

你也可以使用Date。解析方法,但它使用不同的日期格式:

var timestamp = Date.parse("11/30/2011");
var dateObject = new Date(timestamp);

语法如下:

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

so

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

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

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