js里面的new date问题

<html><script>functionasasa(){vardate1=newDate('2018/09/13');vardate2=newDate('2018-0... <html>
<script>
function asasa(){
var date1=new Date('2018/09/13');
var date2=new Date('2018-09-13');
alert("date1:"+date1.getTime()+"\n\r"+"date2:"+date2.getTime())
}
</script>
<body>
<input type="button" value="test" onclick="asasa()">
</body>
</html>

上面的这些代码。date1和date2为什么不相等呢?跟js里面月份从0开始有关?
展开
 我来答
贴了一粑粑
2018-09-26 · TA获得超过1078个赞
知道小有建树答主
回答量:275
采纳率:62%
帮助的人:164万
展开全部
了解了一下Date()函数在作为构造函数时的解析日期字符串参数的规则,感觉最佳答案个人觉得并不是很全面,所以这里写一下自己的看法。
Date()函数像题主的这种用法,即作为构造函数使用,当传入日期字符串的时候,内部其实会调用Date.parse()方法解析日期字符串,根据MDN文档的说法,该日期字符串的要求是“符合 RFC2822 或 ISO 8601 日期格式的字符串(其他格式也许也支持,但结果可能与预期不符)”。像'2018-09-13'这种就是ISO 8601的日期格式,文档中有说明对于ISO 8601日期格式的处理说明:“如果参数字符串只包含日期格式,那么将会使用UTC时区来解析该参数。而如果是ISO 8601 格式中规定的时间加日期的格式,则将会被作为本地时区处理”。
这句话简单的理解就是如果你传的字符串参数不包含时间,那么则表示的是中时区(零时区,本初子午线)的0点0分0秒,转换成北京时间(东八区)自然就得加8个小时咯,所以new Date('2018-09-13')返回的是“Thu Sep 13 2018 08:00:00 GMT+0800 (中国标准时间)”。根据上面的那句话,new Date('2018-09-13T08:00:00')应该与'2018-09-13'返回的是一样的结果,测试确实如此,因为加上时间的话,就会作为本地时区处理。
而“2018/09/13”这种不包含时间的日期格式(并不属于ISO 8601格式,属于什么标准自行了解,我也不懂),显然是直接当做本地时间处理了。你只需要记住,当使用ISO 860即'2018-09-13'这种格式的日期字符串的时候,记得要把时间补全,即便是零,例如new Date('2018-09-13T00:00:00')。
百度网友48429e1
2018-09-25 · TA获得超过336个赞
知道小有建树答主
回答量:340
采纳率:73%
帮助的人:135万
展开全部

'2018-09-13' 是 ISO 8601 格式的日期字符串, 如果参数字符串只包含日期格式,会使用UTC时区来解析该参数。如果是规定的时间加日期的格式,则将会被作为本地时区处理。

var date1=new Date('2018-09-13 00:00:00'); // 1536768000000  本区时区
var date2=new Date('2018-09-13');          // 1536796800000  UTC时区

'2018/09/13' 是非 ISO 格式字符串, 如果一个字符串不符合标准格式,则函数可以使用任何由引擎决定的策略或解析算法

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
网海1书生
科技发烧友

2018-09-25 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26232

向TA提问 私信TA
展开全部
这跟时区有关,date1是格林威治时间,date2是北京时间,date2比date1多8小时
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式