当前位置: 首页 > Web前端 > HTML5

你可能不知道Date类

时间:2023-04-04 23:24:26 HTML5

Date是JS中一个重要的内置对象,它的实例主要用来处理时间和日期,它的时间是从1970-1-1开始的毫秒数(通用标准时间),时间戳为13位长(与10位长的Unix时间戳相反)。有了日期和时间,我们有无数的使用场景,所以需要特别注意一些细节和约定。1.构造函数可以通过newDate()实例化得到一个Date对象实例。值得注意的是,如果直接执行Date(),会得到一个时间字符串。newDate();newDate(value);newDate(dateString);newDate(year,month[,day[,hour[,minutes[,seconds[,milliseconds]]]]]);构造函数的参数说明(参考MDN):如果不输入任何参数,Date构造函数会根据系统设置的当前时间创建一个Date对象。如果至少提供了两个参数,则其余参数将默认为1(如果没有提供day参数)或0。JavaScript时间从1970年1月1日开始,世界标准时间(UTC),以毫秒为单位,一天由86,400,000毫秒。日期对象的范围是-100,000,000天到100,000,000天(等效的毫秒值)。JavaScript的Date对象提供跨平台的统一行为。时间属性可以表示不同系统中的同一时刻,如果使用本地时间对象,则反映本地时间。JavaScript的Date对象提供了几种UTC时间方法,并相应地提供了本地时间方法。UTC,也称为格林威治标准时间,是指时间上的世界时间标准。本地时间是指客户端计算机执行JavaScript设置的时间。将JavaScript的Date对象作为函数调用(即不使用new运算符)会返回表示当前日期和时间的字符串。2.空值处理//以chrome为例newDate();//MonOct23201723:38:02GMT+0800(CST)newDate(false);//ThuJan01197008:00:00GMT+0800(CST)newDate(0);//ThuJan01197008:00:00GMT+0800(CST)newDate(null);//ThuJan01197008:00:00GMT+0800(CST)newDate('');//无效的DatenewDate(undefined);//无效的Date3。特别提示【Firefox】不支持带'-'的完整时间,如newDate('2012-07-0800:00:00')是无效值,而newDate('2012-07-08')是正确的值。[month]newDate(year,month,...)中的月份是从0开始计算的。4.不同执行环境下value的边界值不同,甚至在Chrome下也支持负值。在实际生产环境中,不仅需要考虑时间的显示,还需要考虑它的存储、计算等,所以在具体场景中,我们需要尽可能的考虑数据库和浏览器中Date的有效范围.以数据库Derby存储时间为例,其边界为:边界值最小的日期为0001-01-01,最大日期为9999-12-31,最小时间为00:00:00,最大时间为24:00:00,最小时间戳为0001-01-01-00.00.00.000000最大时间戳为9999-12-31-23.59.59.999999在mysql中,其范围定义为1000-01-01to9999-12-31;在js中,最小时间戳为-8640000000000000,即公元前271821年4月20日,最大值为8640000000000000,即公元前275760年9月13日。规范中的时间范围是1/1/1970前后100,000,000天。5.2038的bug听说2038之后的时间戳不够用。在计算机应用中,2038问题可能会导致部分软件在2038无法正常运行。所有使用UNIX时间表示时间的程序都会受到它的影响,因为它们表示自1970年1月1日以来的秒数(忽略闰秒)。这种时间表示法是类Unix操作系统的标准,并影响以其C编程语言开发的用于大多数其他操作系统的软件。在大多数32位操作系统上,“time_t”数据模式使用带符号的32位整数(signedint32)来存储计算出的秒数。根据“time_t”标准,最后一次可以用这种格式表示的时间是Tuesday,January19,203803:14:07(UTC)。超过这一时刻,时间将回绕并在内部表示为负数,并导致程序无法运行,因为它们不会将此时识别为2038,并且可能会跳回1970或1901,具体取决于1970或1901的实现。错误的计算和行动可能会导致。其实参考Part4,Date的上限就绰绰有余了。大家可以拿起手头的设备测试一下2038年会出现什么样的异常。6.参考1.EmacScript语言规范-http://ecma-international.org/ecma-262/5.1/#sec-15.92,Mysql时间范围-https://dev.mysql.com/doc/refman/5.5/en/datetime.html3,JS时间戳边界-https://stackoverflow.com/questions/11526504/minimum-and-maximum-date7。librarymoment-一个重量级的时间处理库,支持时间解析、格式化、计算等。功能强大,支持浏览器和Node.js,压缩后体积约16.3KBdate-fns-比moment轻量级的事件处理库,体积更小dayjs-打火机moment.js