var oldDate=new Date(2013,08,20,9,10,0,0);
            var tolocalstr=oldDate.toLocaleString();
            var m=oldDate.getMonth();构造函数明明传递的月份是 8, 但是tolocalstr的值是 2013/9/20 9:10:0, 而m的值又是 8, 何解?javascript Date

解决方案 »

  1.   

    这个就是 Month 从0开始的,你用他,也能跟着他走
      

  2.   

    就是这么约定的,没有为什么!
    dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]) 参数
    dateObj 必选项。要赋值为 Date 对象的变量名。
    dateVal 必选项。如果是数字值,dateVal 表示指定日期与 1970 年 1 月 1 日午夜间全球标准时间 的毫秒数。如果是字符串,则 dateVal 按照 parse 方法中的规则进行解析。dateVal 参数也可以是从某些 ActiveX(R) 对象返回的 VT_DATE 值。
    year 必选项。完整的年份,比如,1976(而不是 76)。
    month 必选项。表示的月份,是从 0 到 11 之间的整数( 1 月至 12 月)。
    date 必选项。表示日期,是从 1 到 31 之间的整数。
    hours 可选项。 如果提供了 minutes 则必须给出。表示小时,是从 0 到 23 的整数(午夜到 11pm)。
    minutes 可选项。 如果提供了 seconds 则必须给出。表示分钟,是从 0 到 59 的整数。
    seconds 可选项。 如果提供了 milliseconds 则必须给出。表示秒钟,是从 0 到 59 的整数。
    ms 可选项。 表示毫秒,是从 0 到 999 的整数。
      

  3.   

    你可以写这样就可以了
    var oldDate=new Date('2013/08/20 9:10');
      

  4.   

    呃。。你说的这种应该等价于Date的parse,说到这个,我问一下啊,parse方法究竟能接收哪些格式的日期字符?
      

  5.   

    new Date其实就是new Date(Date.parse(""))和new Date(Date.UTC(""))前者是GMT后者是UTC, 嘿, 再问一下, js怎么知道我构造的这个是GMT还是UTC的?
      

  6.   

    呃。。你说的这种应该等价于Date的parse,说到这个,我问一下啊,parse方法究竟能接收哪些格式的日期字符?解析一个包含日期的字符串,并返回该日期与 1970 年 1 月 1 日午夜之间所间隔的毫秒数。Date.parse(dateVal)
    其中必选项 dateVal 是一个包含以诸如 "Jan 5, 1996 08:47:00" 的格式表示的日期的字符串,或者是一个从 ActiveX® 对象或其他对象中获取的 VT_DATE 值。说明
    parse 方法返回一个整数值,这个整数表示 dateVal 中所包含的日期与 1970 年 1 月 1 日午夜之间相间隔的毫秒数。parse 方法是 Date 对象的一个静态方法。正因为它是一个静态方法,它是通过下面例子中所示的方法被调用的,而不是作为一个已创建 Date 对象的一个方法被调用。var datestring = "November 1, 1997 10:15 AM";
    Date.parse(datestring)
    下面这些规则决定了 parse 方法能够成功地解析那些字符串: 短日期可以使用“/”或“-”作为日期分隔符,但是必须用月/日/年的格式来表示,例如"7/20/96"。 
    以 "July 10 1995" 形式表示的长日期中的年、月、日可以按任何顺序排列,年份值可以用 2 位数字表示也可以用 4 位数字表示。如果使用 2 位数字来表示年份,那么该年份必须大于或等于 70。 
    括号中的任何文本都被视为注释。这些括号可以嵌套使用。 
    逗号和空格被视为分隔符。允许使用多个分隔符。 
    月和日的名称必须具有两个或两个以上的字符。如果两个字符所组成的名称不是独一无二的,那么该名称就被解析成最后一个符合条件的月或日。例如,"Ju" 被解释为七月而不是六月。 
    在所提供的日期中,如果所指定的星期几的值与按照该日期中剩余部分所确定的星期几的值不符合,那么该指定值就会被忽略。例如,尽管 1996 年 11 月 9 日实际上是星期五,"Tuesday November 9 1996" 也还是可以被接受并进行解析的。但是结果 Date 对象中包含的是 "Friday November 9 1996"。 
    JScript 处理所有的标准时区,以及全球标准时间 (UTC) 和格林威治标准时间 (GMT)。 
    小时、分钟、和秒钟之间用冒号分隔,尽管不是这三项都需要指明。"10:"、"10:11"、和 "10:11:12" 都是有效的。 
    如果使用 24 小时计时的时钟,那么为中午 12 点之后的时间指定 "PM" 是错误的。例如 "23:15 PM" 就是错误的。 
    包含无效日期的字符串是错误的。例如,一个包含有两个年份或两个月份的字符串就是错误的。 
      

  7.   

    呃。。你说的这种应该等价于Date的parse,说到这个,我问一下啊,parse方法究竟能接收哪些格式的日期字符?解析一个包含日期的字符串,并返回该日期与 1970 年 1 月 1 日午夜之间所间隔的毫秒数。Date.parse(dateVal)
    其中必选项 dateVal 是一个包含以诸如 "Jan 5, 1996 08:47:00" 的格式表示的日期的字符串,或者是一个从 ActiveX® 对象或其他对象中获取的 VT_DATE 值。说明
    parse 方法返回一个整数值,这个整数表示 dateVal 中所包含的日期与 1970 年 1 月 1 日午夜之间相间隔的毫秒数。parse 方法是 Date 对象的一个静态方法。正因为它是一个静态方法,它是通过下面例子中所示的方法被调用的,而不是作为一个已创建 Date 对象的一个方法被调用。var datestring = "November 1, 1997 10:15 AM";
    Date.parse(datestring)
    下面这些规则决定了 parse 方法能够成功地解析那些字符串: 短日期可以使用“/”或“-”作为日期分隔符,但是必须用月/日/年的格式来表示,例如"7/20/96"。 
    以 "July 10 1995" 形式表示的长日期中的年、月、日可以按任何顺序排列,年份值可以用 2 位数字表示也可以用 4 位数字表示。如果使用 2 位数字来表示年份,那么该年份必须大于或等于 70。 
    括号中的任何文本都被视为注释。这些括号可以嵌套使用。 
    逗号和空格被视为分隔符。允许使用多个分隔符。 
    月和日的名称必须具有两个或两个以上的字符。如果两个字符所组成的名称不是独一无二的,那么该名称就被解析成最后一个符合条件的月或日。例如,"Ju" 被解释为七月而不是六月。 
    在所提供的日期中,如果所指定的星期几的值与按照该日期中剩余部分所确定的星期几的值不符合,那么该指定值就会被忽略。例如,尽管 1996 年 11 月 9 日实际上是星期五,"Tuesday November 9 1996" 也还是可以被接受并进行解析的。但是结果 Date 对象中包含的是 "Friday November 9 1996"。 
    JScript 处理所有的标准时区,以及全球标准时间 (UTC) 和格林威治标准时间 (GMT)。 
    小时、分钟、和秒钟之间用冒号分隔,尽管不是这三项都需要指明。"10:"、"10:11"、和 "10:11:12" 都是有效的。 
    如果使用 24 小时计时的时钟,那么为中午 12 点之后的时间指定 "PM" 是错误的。例如 "23:15 PM" 就是错误的。 
    包含无效日期的字符串是错误的。例如,一个包含有两个年份或两个月份的字符串就是错误的。 
    这个有点绕呢~
    翻阅了一下, ECMA-262没有定义parse应该支持哪种日期格式,因此这个方法的行为因实现而异,而且通常因地区而异的。试了一下,应该都支持这几种:
    1. 月/日/年 8/20/2013 (你贴的上面说的短日期也支持 8/20/13,但是不能日/月/年)
    2.月名 日,年
    3.星期名 月名 日,年 时:分:秒:区 (2和3名字貌似只支持英文?还有要么打完整,要么是公认的缩写-->一般是3个字符 Aug, Jun)
    4 ISO 8601 扩展格式 YYYY-MM-DDTHH:mm:ss.sssZ(也就是你说的 new Date('2013/08/20 9:10'),实现了ECMAScript5的浏览器支持这种格式)
      

  8.   

    咳。。好啦!结贴呗!~谢谢 fzfei2