JS 时间加减 / 小时加减

在实际开发中,有时我们需要对Date对象的时间进行加减操作。最常见的一个原因就是数据库采用了GMT时间来存储,而我们查询本地时会默认减去8个小时。在不能改动数据库的情况下,我们只能对Date对象进行加减操作了。

1. 方式一 (参考于百度,原生的有个致命问题,已经改良)

我按照百度上的大佬的逻辑,自己写了一个转换器。这个转换器的实现原理就是先将手动传入的字符串转换成为Date对象,随后用getFullYear()获取年份、getMonth()获取月、getDate()获取日,getHours()获取小时,然后在这个小时上加上8。getMinutes()获取分、getSecondes()获取秒,最后拼起来一个时间格式化的字符串,最后返回一个Date对象。

function converTime (timeString) {const time=new Date(timeString);timeString=time.getFullYear()+"-"+parseInt(time.getMonth()+1)+"-"+time.getDate()+" "+(time.getHours()+8)+":"+time.getMinutes()+":"+time.getSeconds();return new Date(timeString);
}

看起来是有那么一点道理,那我们来实地测试一下。

let timeString = '2021-8-5 17:00:00'
const time = converTime(timeString);
console.log(time);

17 + 8 = 25,而这个function不会自动帮我们处理日期之间的关系。运行一下

非法日期,那我们来Debug一下,怎么就非法了

官方上关于构造函数种的小时是这么规定的

可能有人会说,处理个日期这很难吗?随便来个mod24判断一下不就行了吗?一个 if else 的事。

呃,一个小时间转换小工具,这么做太繁琐了。不太合适。我们有更好的方式。上面这种方式,更适合用来格式化Date数据的样式,不适合用来做时间的加减法操作。

那我们又很好奇,如果我们传入的不是日期字符串(前面的这种方式属于Date.parse(timeString)的方式),而是具体的参数,能不能帮我们处理日期之间的转换呢?也就是说满 24 日期加一,不用我们真的手动去mod24。

改良版

function converTimeV2 (timeString) {const time=new Date(timeString);return new Date(time.getFullYear(), time.getMonth(), time.getDate(), time.getHours()+8, time.getMinutes(), time.getSeconds());
}

同样的测试代码

let timeString = '2021-8-5 17:00:00'
const time = converTimeV2 (timeString);
console.log(time.toString());

测试结果:可行

2. 方式二:使用毫秒值计算

先将字符串转换成Date对象,获取它的时间毫秒值加上8个小时,再转换成Date,这时候就是一个加了8个小时后的Date对象了。

function converTime (timeString) {return new Date(new Date(timeString).getTime() + 8 * 60 * 60 * 1000);
}

听不懂没关系,我们来Debug跑一遍你就懂了

可以看到这种方式也是可以的。

JS 时间加减 / 小时加减相关推荐

  1. Java Date类型数据 时间加一天,加一小时,加一分,加一秒

    首先获取当前的时间 Date date = new Date();System.out.println(date); 输出: Sun Jun 19 18:25:20 CST 2022 将date转换为 ...

  2. Python 日期时间datetime 加一天,减一天,加减一小时一分钟

    当前日期时间 import datetimeprint(datetime.datetime.now())# 2019-03-28 17:22:51.750103 格式化时间 import dateti ...

  3. python时间加减秒_Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年...

    计算年.月.日需要安装组件包 pip install python-dateutil 当前日期时间 import datetime print datetime.datetime.now() # 20 ...

  4. java date 减小时_java 获取本机当前时间并对小时任意加减

    展开全部 代码如下: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; publ ...

  5. mysql 时间戳加减_mysql加减时间-函数-时间加减

    mysql加减时间-函数-时间加减 mysql加减时间-函数-时间加减 1. MySQL 为日期增加一个时间间隔:date_add() set @dt = now(); select date_add ...

  6. php购物车数量加减代码,js实现购物车商品数量加减

    本文实例为大家分享了js实现购物车商品数量加减的具体代码,供大家参考,具体内容如下 Html - + CSS .list a { display: block; margin: 30px; paddi ...

  7. js 12:00时间加上半小时,返回小时和分钟

    案例: 12:00 要求返回12:30 // 时间获取加上半小时后返回小时和分钟function MinutesTest(val) {var sdate1 = new Date(val);sdate1 ...

  8. java时间差的百分之二十,Java对日期Date类进行加减运算、年份加减月份加减、时间差等等...

    实现代码一: import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public c ...

  9. javascript 时间日期处理相加,减操作方法js

    javascript 时间日期处理相加,减操作方法js (2011-04-22 18:08:51) 转载▼ 标签: 杂谈   [JavaScript]2009-02-21 12:01:32 阅读523 ...

最新文章

  1. MTK平台 Android4.0.3 定制关机动画
  2. jvm - 垃圾回收 gc
  3. 永冻土层matlab图片,北极圈都32℃了!千年永冻土层快“热化”了?
  4. nagios 整合 ganglia 设置邮件、短信报警
  5. linux 常用技巧脚本分享
  6. mysql8无法修改端口_mysql8.0.18 修改端口报错 Can't start server: Bind on TCP/IP port: Permission denied...
  7. 《javascript入门学习笔记全集》【汇总】
  8. whitepages 被调查_槐荫区美里湖办事处残联开展2020年残疾人精准服务需求调查工作...
  9. [JDK8] Lambda
  10. 如何调整基准电压提高ADC精度
  11. Chapter 3 Raster Images
  12. iOS_21团购_拼音搜索
  13. Solidity简单例子-代理投票
  14. 做微商洗发水怎么做引流?洗发水类微商怎么引流精准客户?
  15. Go语言(Golang)的Web框架比较:gin VS echo
  16. Java编程:颜色色带图片的生成
  17. Win11设备管理器在哪里打开?
  18. 鱼眼图像(fisheye image)通过几何变换形成透视图(a perspective view)[存疑]
  19. Linux多定时器实现之二
  20. JAVA学习笔记(三) 实现类

热门文章

  1. 【路科验证008】DVT 软件使用指导
  2. linux内核5万行代码,[图]AMD为Linux内核贡献27.5万行代码 确认Van Gogh APU支持DDR5和VCN3...
  3. react函数式组件传值之父传子
  4. pages改变文档背景和改变文字背景
  5. 腾讯云CVM云服务器1M宽带能干嘛?1M宽带支撑多少人在线?
  6. 超级详细:公网环境下登录 Docker 仓库: Docker Hub 或 国内阿里镜像仓库!超级解惑!(推送镜像到docker hub 或 国内阿里云镜像仓库)
  7. Opensea到底是怎么交易NFT的
  8. 笔记本添加固态硬盘记
  9. Java学习之路01——2021年职业规划
  10. 嫦娥奔月(神话,非航天器)