现在是2019年12月1日0点27分,我的心情依旧难以平静。这个月是2019年的最后一个月,是21世纪10年代的最后一个月,也是第一批90后30岁以前的最后一个月。就是在这个月的第一天的0点0分,我写的代码出了一个bug,简直让我欲哭无泪。

事情是这样的,我们公司在双十一搞了个促销活动,时间是11月1日到12月1日0点整。为了保证在2019-12-01 0点时,所有小程序上双十一相关的UI元素准时下架,我写下了如下代码:

// 查出12月1日的时间戳
new Date('2019-12-01').getTime() //或Date.parse('2019-12-01') 1575158400000
const isS11 = Date.now() < 1575158400000

一切的UI元素都将根据这个isS11这个布尔值进行显示和隐藏。我提前把逻辑写好之后,早早就发布到线上。周五运营的同事问起时还得到我信誓旦旦的保证,我说,肯定没问题,我都安排好了,0点保证下架。

0点的钟声敲响了。老板在群里发了红包,我抢过了之后,打开小程序,看看双十一是不是下线了。意外还是出乎意料的发生了,元素还在!!我有点慌了起来,又尝试了刷新和重新打开小程序,双十一依然还在,纹丝不动。我就觉得脸有点火辣辣的——打脸了!

我马上打开vscode,查找原因,在控制台写下下面的代码:

纳尼?为什么是早上8点???不应该是默认0点吗?不管了,先改正再说,于是加上时分秒:

const isS11 = Date.now() < Date.parse('2019-12-01 00:00')

这回正常了。赶紧紧急提交一个版本先~提交完之后开始翻TC39的规范:终于在这里找到了解释。当Date构造函数接受一个字符串作为参数时,会调用Date.parse来得到时间戳。而在Date.parse中有这么一段话:

When the UTC offset representation is absent, date-only forms are interpreted as a UTC time and date-time forms are interpreted as a local time.

翻译过来就是:当字符串中没有UTC的标记时,只有日期的字符串会被当成UTC时间来解析,有日期和时间的字符串会被当成本地时间来解析。

new Date('2019-12-01') //按UTC0时区的时间0点,相当于北京时间早上8点
new Date('2019-12-01 00:00') //按北京时间0点

我们是东八区,比UTC时间快8个小时。我输入的字符串是2019-12-01被当成UTC时间的12月1日0点,所以换成本地时间是12月1日8点。。。

最后,首先吐槽一下TC39制定规范的大佬们,为什么不能都按本地时间来解析呢?不然我也不会掉到坑里。。不过,好在微信加急审核效率高,只用半个小时就审核通过(这里给微信点个赞

2019年12月的第一个bug的更多相关文章

  1. 日常Git使用——2019年12月11日16:19:03

    1.git介绍 1.1 什么是git? 什么是Git? 比如一个项目,两个人同时参与开发,那么就把这个项目放在一个公共的地方,需要的时候都可以去获取,有什么改动,都可以进行提交. 为了做到这一点,就需 ...

  2. AHKManager.ahk AHK管理器 2019年12月15日

    AHKManager.ahk  AHK管理器  2019年12月15日 快捷键   {Alt} + {F1} ///////////////////////////////////////////// ...

  3. 34.ITerm配置使用——2019年12月24日

    2019年12月23日15:17:36 ITerm使用教程 1.快键键配置 设置方法 设置方法如下: (1)选择 Preference 进入偏好设置: (2)选择 Profiles > Keys ...

  4. 36.React基础介绍——2019年12月24日

    2019年12月24日16:47:12 2019年10月25日11:24:29 主要介绍react入门知识. 1.jsx语法介绍 1.1 介绍 jsx语法是一种类似于html标签的语法,它的作用相当于 ...

  5. 35.ES6语法介绍——2019年12月24日

    2019年12月24日16:22:24 2019年10月09日12:04:44 1. ES6介绍 1.1 新的 Javascript 语法标准 --2015年6月正式发布 --使用babel语法转换器 ...

  6. 24.mongodb可视化工具部署——2019年12月19日

    2019年10月09日17:05:54 教程链接:https://blog.csdn.net/qq_32340877/article/details/79142129 项目名:adminMongo g ...

  7. 22.Express框架——2019年12月19日

    2019年12月19日14:16:36 1. express简介 1.1 介绍 Express框架是后台的Node框架,所以和jQuery.zepto.yui.bootstrap都不一个东西. Exp ...

  8. 20.Nodejs基础知识(上)——2019年12月16日

    2019年12月16日18:58:55 2019年10月04日12:20:59 1. nodejs简介 Node.js是一个让JavaScript运行在服务器端的开发平台,它让JavaScript的触 ...

  9. 19.go语言基础学习(下)——2019年12月16日

    2019年12月16日16:57:04 5.接口 2019年11月01日15:56:09 5.1 duck typing 1. 2. 接口 3.介绍 Go 语言的接口设计是非侵入式的,接口编写者无须知 ...

随机推荐

  1. Laravel向表里插入字段

    执行: php artisan make:migration add_字段_to_表名_table --table=表名 此时在database/migrations文件夹下会生成一个相应文件,更改如 ...

  2. maven 学习---使用Maven模板创建项目

    在本教程中,我们将向你展示如何使用mvn archetype:generate从现有的Maven模板列表中生成项目.在Maven 3.3.3,有超过1000+个模板,Maven 团队已经过滤掉一些无用 ...

  3. 【转】聊一聊-JAVA 泛型中的通配符 T,E,K,V,?

    原文:https://juejin.im/post/5d5789d26fb9a06ad0056bd9 前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型 ...

  4. Hibernate基于注解实现自关联树形结构实现

    很久没用过Hibernate了,项目需求需要使用,并建立树形结构,在开发中遇到一些问题,在这里记录一下. 1.创建数据库表,主要是设置标志信息,不然插入数据库会报id不能插入null的错误. 2.创建 ...

  5. 原生 JavaScript 代替 jQuery【转】

    目录 用原生JavaScript代替jQuery Query Selector CSS & Style DOM Manipulation Ajax Events Utilities Promi ...

  6. elasticsearch 单节点出现unassigned_shards

    查看单节点Elasticsearch健康状态 使用head插件查看集群状态 从上面截图可以看出存在5个unassigned的分片,新建索引blog5的时候,分片数为5,副本数为1,新建之后集群状态成为 ...

  7. Shel脚本-初步入门之《01》

    Shel脚本-初步入门-什么是 Shell 1.什么是 Shell Shell 是一个命令解释器,它的作用是解释执行用户输入的命令及程序等.Shell 存在于操作系统的最外层,负责与用户直接对话,把用 ...

  8. [转]MVC & JavaEE三层架构

  9. python requests访问https的链接,不打开fiddler的情况下不报错;若是打开fiddler则报ssl错误,请求中添加verify=False,会报警告;若不想看到警告,有3种方式;

    import requests# import warnings# warnings.filterwarnings("ignore") #方法一#requests.packages ...

  10. LiunxCentos7 上安装 FastDFS

    Centos7 上安装 FastDFS 1.安装gcc(编译时需要) FastDFS是C语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gc ...