js new Date(String)少8个小时导致的问题以及解决办法

2024-08-21 08:18

本文主要是介绍js new Date(String)少8个小时导致的问题以及解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

业务需求:人员投入的时间要大于等于项目开始时间并且小于等于项目结束时间

场景描述:项目开始时间 2021-09-06,项目结束时间 2021-11-09,人员开始投入时间 2021-09-06,结果在 elemnetUI 的日期选择组件中2021-09-06这一天被禁用了,无法选择 2021-09-06 这一天。

经过分析,问题出在了日期选择组件中可选日期的逻辑代码中,代码中是根据时间戳(毫秒)来进行判断的,组件中日期的毫秒值默认是00:00:00的值,而项目开始时间在转换为毫秒后获取到的是08:00:00的毫秒值。在业务人员眼中明明都是 2021-09-06 ,为什么这一天被禁用了?实际上在通过new Date("2021-09-06")的方法转换毫秒值后,项目开始时间的2021-09-06比组件日期选择面板中的2021-09-06少了 8*60*60*1000 毫秒,所以面板中的 2021-09-06 被禁用了。问题定位清楚了,解决起来就方便多了!!!

下面简单说说 new Date()new Date("YYYY-MM-dd")new Date("YYYY", "MM", "dd")的区别
new Date() // 获取的是当前时间,即此时此刻的时间 
// Fri Dec 10 2021 22:56:02 GMT+0800 (中国标准时间)new Date("2021-12-10") // 获取的是 `2021-12-10` 早上 `08:00:00` 
// Sat Dec 10 2021 08:00:00 GMT+0800 (中国标准时间)new Date("2021", "12", "10") // 获取的是 `2022-01-10` 凌晨 `00:00:00` 
// Tue Jan 10 2022 00:00:00 GMT+0800 (中国标准时间)

注意:new Date(“2021”, “12”, “10”) 获取的时间比指定的月份多了1个月,与getMonth() + 1获取当月月份同样的道理,要通过new Date(“YYYY”, “MM”, “dd”)的方式获取到预期的时间需要 实际月份 -1指定 MM 才能获取到当月实际时间

说明:new Date(“2021”, “11”, “10”) 与 new Date(“2021-12-10 00:00:00”) 获取到的时间是一样的

new Date("2021", "11", "10").getTime() === new Date("2021-12-10 00:00:00").getTime() // true

另外:new Date() 获取的是当前主机的时间,当前主机时间改成哪一天,new Date()获取就是改后那一天的时间,所以当要使用new Date()的值来作为校验条件时,最好是获取服务器的时间 前端获取服务器时间

最后

解决问题的办法不止一个,选择一个符合实际情况的方案才是最重要的

这篇关于js new Date(String)少8个小时导致的问题以及解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092612

相关文章

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

java String.join()的使用小结

《javaString.join()的使用小结》String.join()是Java8引入的一个实用方法,用于将多个字符串按照指定分隔符连接成一个字符串,本文主要介绍了javaString.join... 目录1. 方法定义2. 基本用法2.1 拼接多个字符串2.2 拼接集合中的字符串3. 使用场景和示例3

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码