三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之

Date对象初始化Month,Day参数的奇葩设定的解释
作者:Neoxone    发表时间: 2014年08月16号,星期六     阅读:5,653 次

new一个Date对象时,当以年份Y,月份M,日期D为参数传入来设定的时候,我们会发现:月份M是从0开始的,而日期D却是从1开始的。
即:M:0是一月,1是二月,11是十二月,但D:1 是一号,2是二号,31是三十一号。
如下:

是不是觉得很别扭,很奇葩?

对于习惯了以“一月”称呼“January”,“二月”称呼“February”的人来说,让”0″和”一”对应,”1″和”二”对应肯定是超级别扭啊,
但好在我们这种人还属于“猿”类,对于一个程序猿来说,数组的第一位肯定是0,我们晚上数sheep都是从0开始数的,而整个世界也是由0起源的(当然终极是42!)。

如果说程序界都是以0为基数的,那为什么Day又是从1开始呢?
那么我告诉你1Day其实根本不是数组的第一项,Sheep的第一只,一个月的第一天!和月份一样,日期的初始也是0!
当1Day完成的时候,时间就已经过去了二十四小时,一千四百四十分钟,八万六千四百秒了。
所以0Day才是days的开始,那么我们来看看0Day到底是什么时候,让我们从1Day开始往前回溯,慢慢走,时光在此倒流,直到我们来到EVE,其实我们将每一天的开始设在了前夜。
如果按小数来细分的话,每月1号的正午应该算是0.5号,而10号的下午6点就是九又四分之三号!

如果我已经把大家弄糊涂了的话,那么我是故意的,23333。。。

0Day的设计,其实还有一个巨大的好处,我们调用new Date就可以轻松拿到当月的最后一号,而不用你自己去考虑大小月、闰年2月。
如下:

码字充数:
在知乎上看见有人提问javascript 里面为什么不提供date的格式化函数?其实在Firefox上是提供了一个toLocaleFormat方法的。

参考: Date.prototype.toLocaleFormat()

标签: ,

3 条评论 发表在“Date对象初始化Month,Day参数的奇葩设定的解释”上

  1. 知丟 说:

    不錯不錯啊,很詳細的說

    回复

  2. 说:

    ):1:(
    涨知识了,知道了什么是终极42

    回复

留下回复

):9:( ):8:( ):7:( ):6:( ):5:( ):4:( ):3:( ):2:( ):20:( ):1:( ):19:( ):18:( ):17:( ):16:( ):15:( ):14:( ):13:( ):12:( ):11:( ):10:(