上述两种新日期格式都会产生不同的结果。
new Date(2015,2,30) : Date 2015-03-29T18:30:00.000Z
new Date('2015-2-30') : Invalid Date
为什么会有所不同?
EDITS 要点: 1.第一种格式的月份索引从0开始。 2.第一种格式处理日期的溢出,因此不是测试无效日期的首选方式。
例如:new Date(2015, 1, 30) {when the user is looking for 30,Feb,2015}
将转换为2015年3月1日。那是额外的日期是转发到月份。根据我的说法相当猥亵。但是,如果您写new Date("2015-2-30"){when the user is looking for 30,Feb,2015}
,这将是无效日期。
答案 0 :(得分:2)
您使用不同类型的参数调用Date constructor:
在第一种情况下,您提供用于填充其字段的整数(前三个是年份,月份和月份);请注意,monthes为0索引:该字段中的值1对应于2月而不是1月
在第二种情况下,您提供的String
将被解析,就像传递给Date.parse
一样,即ISO 8601扩展格式日期({{1} })
答案 1 :(得分:1)
这是因为在第一个例子中你传递了参数
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
然后通过第二个传递无效的日期字符串。在0
2
new Date(dateString);
答案 2 :(得分:1)
您可以通过以下方式创建新的Date
:
var d = new Date();
var d = new Date(milliseconds);
var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
对于dateString
,必须通过以下输入之一提供:
ISO Date "2015-03-25" (The International Standard)
Short Date "03/25/2015" or "2015/03/25"
Long Date "Mar 25 2015" or "25 Mar 2015"
Full Date "Wednesday March 25 2015"
答案 3 :(得分:0)
ECMAScript日期有一个基本规则:永远不要使用Date构造函数或Date.parse(它们等同于解析)来解析字符串。
鉴于data YourData;
format date date9. ;
do i=1 to 100 ;
date=intnx('day', '17oct03'd,i);
var=rand('uniform');
output;
end;
drop i;
run;
Data Find;
set YourData;
Month=month(date);
day=day(date);
Weekday=WEEKDAY(date);
/* weekday=5 this is thursday */
if weekday=5 and month=12 then flag=1;
/* flag2 retains the value */
flag2+flag;
if month=12 and flag2 < 2 then Dummy=1;
else if month=12 and flag2=2 and flag=1 then Dummy=1;
else if month=12 then Dummy=0;
else Dummy=.;
run;
,这些值在2015年3月30日被视为“本地”,因此UTC时间值会根据该日期主机上的时区偏移进行调整。所有实现中的结果将与至少从ed 3开始的所有ECMAScript版本一致。
给定字符串new Date(2015,2,30)
,使用浏览器解析算法。该字符串可能被视为:
另外,给定new Date('2015-3-30')
:
new Date('2015-2-30')
的行为相同)以上所有结果均与ECMAScript 2016一致。因此,开场陈述。
在解析时验证日期值的最快方法是测试月份,最简单的方法是以d / m / y格式解析日期:
new Date(2015,1,30)
答案 4 :(得分:-1)
输出
console.log(new Date(2015,2,30)); // here 2 represents the march, ,month starts from 0 where 0 represents first month
console.log(new Date('2015-3-30'));
Mon Mar 30 2015 00:00:00 GMT+0530 (India Standard Time)
Mon Mar 30 2015 00:00:00 GMT+0530 (India Standard Time)
new Date('2015-2-30') // it means 30th day in February; which will convert it to second march