起因

最近在写一个页面,需要用到时间控制。然后我通过new Date()传入日期字符串创建了一个对象,并与当前时间做时间戳比较,结果12点刚过,就出问题了。举个栗子:

// 假设当前时间是2019年12月22日0点20分
new Date('2019-12-22').getTime() < new Date().getTime()
// 上面的结果是什么?正常来说应该是true吧,但不好意思啊,返回了false

百思不得其解,当时因为情况紧急,查出了上面的创建时间返回的内容并不是0点,而是8点

所以就强行在时间字符串上拼接了时间:new Date('2019-12-22 00:00:00').getTime(), 强行解决了这个问题。

然后又碰到了在IOS上不识别中横线分割的时间字符串问题,讲中横线转成了反斜杠。

当时临时解决问题后的字符串大概长这样:

new Date('2019/12/22 00:00:00').getTime() < new Date().getTime()

临时解决问题。现在闲来无事,可以看看这个问题究竟是什么鬼?

尝试

传入不同的字符串格式,看看结果,我只尝试了最常使用的两种格式

惊讶的发现,-分割的字符串,被默认解析到了8点,而/分割的字符串,默认解析到了0点。这么说来,我之前有点多次一举了,直接讲-替换成/就可以了啊。

探究

那么为什么默认是8点呢?有没有觉得8这个数字很值得关注,我们所在的时区是东八区,如果以GMT标准0点来算的话,在那个时间点,这里就是8点啊。

那我就可以这样理解了,创建时间时,它默认时间确实是0点,但是是以GMT为基准的,所以将其转换成本地时间就是8点。而/分割的字符串在创建时,则是以本地时区为基准。

那么为什么js会对不同分割的时间字符串进行不同处理呢?貌似是因为-分隔且具有前导0的日期字符串,会被解析成ISO格式的字符串,以GMT时区为基准,不过我也没看懂。

解决

最终,既然-分割的字符串会出问题,那我就讲所有的-都换成/就好了,正好也可以借此解决IOS的兼容问题。动手解决:


/*** 将时间字符串转换成date对象* @param dateStr* 时间字符串*/
function getDate(dateStr){/* 若日期是使用-分割的,全部转换成/因为只有日期时,js会将-分割的字符串基准时区设置为GMT,与当前时区相差8小时 */dateStr = dateStr.replace(/-/g, '/');return new Date(dateStr);
}

js new Date 创建时间默认是8点相关推荐

  1. mysql默认时间怎么不同步_MYSQL 更新时间自动同步与创建时间默认值共存问题

    本文作者:苏生米沿 在使用SQL的时候,希望在更新数据的时候自动填充更新时间,那么在mysql中是如何实现的呢? 如创建表users CREATE TABLE RS_SIGNUPUSER ( ID V ...

  2. js new Date() 当前时间/指定时间转换为时间戳

    获取当前时间/指定时间时间戳(毫秒值) // 方式一 Date.now(); // 1606381881650(打印时的时间戳) // 方式二 new Date() - 0; // 160638188 ...

  3. java的date时间比较_java Date型时间比较大小

    方式一: 两个Date类型的变量可以通过compareTo方法来比较.此方法的描述是这样的:如果参数 Date 等于此 Date,则返回值 0:如果此 Date 在 Date 参数之前,则返回小于 0 ...

  4. 【js Date】时间字符串、时间戳转换成今天,明天,本月等文字日期

    作为前端开发攻城师,难免对时间进行各种计算和格式转换,一个js的Date对象统统可以搞定. 下例是将一个具体的时间转换成今天.明天.几天之内.本月等文字描述的日期的工具函数,也可以基于它扩展,多应用于 ...

  5. js取服务器系统时间,JS中new Date()用法及获取服务器时间

    1.获取服务器时间: var now = new Date($.ajax({async: false}).getResponseHeader("Date")); 2.new Dat ...

  6. java poi 设置时间空间_java - POI - 如何将单元格值设置为Date并应用默认的Excel日期格式?...

    java - POI - 如何将单元格值设置为Date并应用默认的Excel日期格式? 我已经使用Apache POI一段时间以编程方式读取现有的Excel 2003文件. 现在我有了一个新的要求,即 ...

  7. java 创建 时间_java创建Date日期时间笔记

    (1)public Date() 创建的日期类对象的日期时间被设置成创建时刻相对应的日期时间. 例: Java代码 1.Date today=new Date();  //today被设置成创建时刻相 ...

  8. mysql添加时间默认值_mysql 创建时间字段添加默认值

    在创建时间字段的时候 例如:字段  create_time   默认值可以设置为CURRENT_TIMESTAMP插入数据时候会自动添加时间,默认值为当前时间 update_time  默认值可以设置 ...

  9. JS基础--Date.parse(),Date.UTC()和Date.now()

    一. UTC和GMT的关系 什么是GMT? 格林尼治标准时间(Greenwich Mean Time,GMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线. 理 ...

最新文章

  1. 给图像特征提取开个“ViP”是什么效果?字节牛津提出视觉解析器,全面超越HaloNet!...
  2. ccombox获取选择的文本_PC端最好用的翻译软件,支持引擎切换、文本朗读
  3. static在内存层面的作用_虚拟地址空间--用户进程看到的自己所占用的内存
  4. C# 系统应用之鼠标模拟技术及自动操作鼠标
  5. 【机器学习】XGBoost学习笔记
  6. springmvc学习(一)
  7. 使用Qt Creator 2.60编写C/C++程序
  8. python 灰色系统预测GM
  9. 求1+2+3+.....+n
  10. python搜索关键词自动提交_简单爬虫:调用百度接口,实现关键词搜索(python_003)...
  11. swoole2.0与java_swoole2.0试用说明
  12. 关于python装饰器的总结
  13. 2019年5月,国际计量单位实施新定义
  14. 计算字符串的相似度-两种解法
  15. 智能电子秤全国产化电子元件推荐方案
  16. Git基础(18):如何使用GitLab
  17. linux内存中的文件权限,Linux系统管理(用户权限、磁盘存储、文件系统、内存、进程)...
  18. 2013,我的创业记忆片段
  19. 关于技术部管理的一些思考
  20. Attention机制介绍(原理+代码)

热门文章

  1. 现代软件工程讲义 2 开发技术 - 效能分析
  2. probe request帧结构_WLAN 无线网络 09 - 管理帧
  3. IOC操作Bean管理XML方式(外部属性文件)
  4. IOC容器(底层原理解读)
  5. python语言例子_【Python】SimPy的使用示例-Go语言中文社区
  6. code blocks c语言,Code Blocks安装与使用图文教程(使用Code::Blocks编写C语言程序)...
  7. php 共享内存列队,php中对共享内存,消息队列的操作
  8. vs传值接收页面怎么直接打开_VS2003传值
  9. 审计工作存在的难点和问题_电力工程造价审计的难点与对策有哪些?学习安装电力造价广联达计价看这里!!...
  10. html代码里面换图片不显示不出来了,微擎 Ueditor 百度编辑器 替换图片不显示问题...