前端传时间到后端时间不一致问题处理

问题:

前端时间变量代码

    const date=new Date();
    date.setHours(0, 0, 0, 0);
    date.setFullYear(2023);
    date.setMonth(1);
    date.setDate(30);
    console.log(date)
  const formattedDate = moment(date).tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
  this.dateString=formattedDate

后端接收字符串并将其转为date类型

        DateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  
        Date newDate =null;
        try {
            newDate = targetFormat.parse(dateString);
            System.out.println(newDate); // 输出转换后的Date对象
        } catch (Exception e) {
            e.printStackTrace();
        }

结果:

前端:2023-02-30
后端:2023-03-02

因为前端和后端对日期的解析方式不一致,导致了日期的转换错误。
在前端,JavaScript的Date对象支持传入一个字符串来创建日期对象,如下所示:

var date = new Date('2022-01-30');

在这种情况下,JavaScript会将字符串按照ISO 8601标准解析成本地时间。因为ISO 8601标准中规定日期格式为"YYYY-MM-DD",所以上面的代码会创建一个表示2022年1月30日的Date对象。
在后端,Java中的Date对象也可以从字符串解析得到,如下所示:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse("2022-01-30");

在这种情况下,Java会按照指定的日期格式解析字符串。因为上面的代码中指定的日期格式为"yyyy-MM-dd",所以会创建一个表示2022年1月30日的Date对象。
如果前端和后端对日期的解析方式不一致,就会导致日期的转换错误。比如,如果前端传递的日期字符串是"2022-01-30",但是后端将其解析为了"2022-03-02",那么可能是因为前端和后端对日期的解析方式不一致,比如:

  • 前端传递的日期字符串中包含时区信息,但是后端没有对时区进行处理,导致日期被错误解析;
  • 前端和后端对日期的解析方式不一致,比如前端按照ISO 8601标准解析日期,而后端按照其他标准解析日期,导致日期被错误解析。

为了避免这种情况发生,建议前后端采用统一的日期格式,并且在传递日期时,明确指定时区信息。比如,在前端可以使用moment.js库来格式化日期并指定时区信息,如下所示:
导入moment和moment-timezone

npm install moment --save 
npm install moment-timezone --save 

如果下载失败则

npm install moment --force
npm install moment-timezone --force
var date = moment('2022-01-30').tz('Asia/Shanghai').format('YYYY-MM-DD');

在这种情况下,moment.js会将日期字符串按照ISO 8601标准解析成本地时间,并将本地时间转换成指定时区的时间。然后,再将时间格式化成指定的日期格式。在后端也可以采用类似的方式,使用SimpleDateFormat类来格式化日期并指定时区信息,如下所示:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
Date date = format.parse("2022-01-30");

在这种情况下,SimpleDateFormat类会将日期字符串按照指定的日期格式解析成本地时间,并将本地时间转换成指定时区的时间。然后,再将时间格式化成指定的日期格式。这样,前后端就可以采用统一的日期格式,并且在传递日期时,明确指定时区信息,避免日期转换错误。

加了时区后
前端代码

    const date=new Date();
    date.setHours(0, 0, 0, 0);
    date.setFullYear(2023);
    date.setMonth(1); 
    date.setDate(30);
    console.log(date)
  const formattedDate = moment(date).tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
  this.dateString=formattedDate

后端代码

        DateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        targetFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); //设置时区
        Date newDate =null;
        try {
            newDate = targetFormat.parse(dateString);
            System.out.println(newDate); // 输出转换后的Date对象
        } catch (Exception e) {
            e.printStackTrace();
        }

结果

前端:2023-2-30
后端:2023-2-30

???明明我设置的是1月30号怎么成了2月30后,

原因:setMonth()从0到11的整数(表示个月份,从一月到十二月)

将1改为0即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/6696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国内IT软件外包公司汇总(2023 最新版)!

大环境不行,面试太少了,很多本科生想进外包都没机会。非常时期,不需要在意那么多,外包作为过渡也是没问题的,很多外包其实比小公司还要好多了。 也不要太担心去外包会污染自己的简历,只要接触的项目还可以…

电商平台API接口,店铺所有商品

item_search_shop-店铺的所有商品 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥(注册Key和secret接入: https://o0b.cn/anzexi)api_nameString是API接口名称(包括…

动态规划-构造最优二叉树的解路径_20230403

动态规划-最优二叉搜索树的解路径(算法导论) 前言 本文将探索递归的先序和后续对信息表达的影响,通过考察最优二叉搜索树的解roo[i][j]的解,我们可以分析先序和后续遍历之间的互相转换关系,以及为了转换,所付出的空间…

蓝桥杯第23天(Python)(疯狂刷题第6天)

题型: 1.思维题/杂题:数学公式,分析题意,找规律 2.BFS/DFS:广搜(递归实现),深搜(deque实现) 3.简单数论:模,素数(只需要…

下一个系统不是Win12,微软要复活Win10X

先是 Windows 三年发布周期回归又是官方 UI 泄露,再到前不久新增的测试频道… 微软将在2024年推出或许名为 Windows 12 的下一代系统基本已经板上钉钉了。 相比过去,小蝾总觉得即便是换代更新能带来的震撼都越来越少了。 当年每一个版本都是划时代的更…

.net C#反编译及脱壳常用工具--小结

1、Reflector --微软自家工具--推荐 Reflector是最为流行的.Net反编译工具。Reflector是由微软员工Lutz Roeder编写的免费程序。Reflector的出现使NET程序员眼前豁然开朗,因为这个免费工具可以将NET程序集中的中间语言反编译成C#或者Visual Basic代码。除了能将IL转…

【学习笔记、面试准备】机器学习西瓜书要点归纳和课后习题参考答案——第3章

机器学习西瓜书要点归纳第3章 线性模型3.1 基本形式3.2 线性回归3.3 对数几率回归3.4 线性判别分析3.5 多分类学习3.6 类别不平衡问题3.7 阅读材料习题目录地址 第3章 线性模型 3.1 基本形式 线性模型定义: 其中x是输入向量 优点:形式简单&#xff…

C#中的转换

一、什么是转换 将一个类型转换为另外一个类型;可以是两个值类型之间的转换;可以是两个引用类型之间的转换;可以是值类型和引用类型之间的转换(拆箱与装箱);可以用户自定义转换。转换的时候有隐式转换/自动…

lombok快速入门

Lombok是一个实用的Java类库&#xff0c;可以通过简单的注解来简化和消除一些必须有但显得很臃肿的Java代码。 通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法&#xff0c;并可以自动化生成日志变量&#xff0c;简化java开发、提高效率。 <…

好用到爆的windows文件检索工具--Everything

如果你的电脑是windows系统&#xff0c;那么这款软件强烈推荐大家安装>Everything&#xff0c;他可以帮助你快速的检索的磁盘里的文件&#xff0c;话不多说&#xff0c;开始安装 1.下载 访问https://www.voidtools.com/zh-cn/会跳转官方下载地址 双击安装包运行 效果如下…

Tensor张量基础与常用方法【Pytorch】

Tensor中文译名为张量&#xff0c;标量是零维张量&#xff0c;向量是一维张量&#xff0c;矩阵是二维张量&#xff0c;矩阵的堆叠是三维张量…… 张量的维数可以无穷大&#xff0c;不过由于现实世界是三维的&#xff0c;因此更高维度的图形我们无法想象&#xff0c;但是这并不…

即时通讯-6-已读回执的方案设计

背景-为什么展示已读未读 部分即时通讯软件会选择展示给用户已读未读&#xff0c; 主要是快速感知对方的阅读状态&#xff0c; 感觉到自己受重视&#xff0c; 方便做下一步操作。 如果要带点高度的讲&#xff0c;满足软件所代表的关键用户的诉求 什么场景下要展示已读回执 t…

462. 最小操作次数使数组元素相等 II——【Leetcode每日一题】

462. 最小操作次数使数组元素相等 II 给你一个长度为 n 的整数数组 nums &#xff0c;返回使所有数组元素相等需要的最小操作数。 在一次操作中&#xff0c;你可以使数组中的一个元素加 1 或者减 1 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;2 …

微信小程序获取手机号47001 data format error hint的完美解答(restTemplate发送post请求)

发现问题 这几天正在搞微信小程序获取手机号功能开发&#xff0c;发现发送post请求接口时候&#xff0c;接口返回如下错误&#xff1a; {"errcode": 47001,"errmsg": "data format error hint: [******] rid: ******" } post请求的url为&…

动态代理原理

一、案例分析 1、引出问题 回到Spring之初控制事务繁琐的问题。 回到Spring之初控制事务繁琐的问题. 考虑一个应用场景∶需要对系统中的某些业务方法做事务管理&#xff0c;拿简单的save和update操作举例。没有加上事务控制的代码如下。 加上事务代码&#xff0c;如下&#x…

大数据平台开发——使用Java和Python调用Shell脚本

大数据平台开发——使用Java和Python调用Shell脚本 背景 在大数据平台开发中&#xff0c;经常会遇到需要调用Shell脚本的场景&#xff0c;倒不是说只能用Shell&#xff0c;毕竟大数据开发到头来一定是个语言无关的事情&#xff1a; 从Hive源码解读大数据开发为什么可以脱离S…

Java进阶

注解 什么是注解 Java注解&#xff08;Annotation&#xff09;又称Java标注&#xff0c;是JDK5.0引入的一种注释机制。 Java语言中类、方法、变量、参数和包等都可以被标注。Java标注可以通过反射获取标注内容。在编译器生成类文件时&#xff0c;标注可以被嵌入到字节码中。Ja…

【Python实操】一行代码就可以自动画出这种艺术画?(详细教程)

文章目录前言一.准备阶段二、开始使用 Discoart1.引入库2.显示/保存/加载配置总结前言 DiscoArt 是一个很牛逼的开源模块&#xff0c;它能根据你给定的关键词自动绘画。 绘制过程是完全可见的&#xff0c;你可以在 jupyter 页面上看见这个绘制的过程&#xff1a; 一.准备阶段…

零拷贝内存 固定内存

一、总览 虚拟内存是一种计算机内存管理的技术&#xff0c;它让程序认为程序自身有一段完整的连续可用的内存&#xff08;一个地址空间&#xff09;。当程序运行时所占的内存空间大于物理空间容量&#xff0c;操作系统可以将暂时不用的数据放入到磁盘&#xff0c;用的时候再拿出…

Linux--高级IO--select--0326

目录 IO为什么低效&#xff1f; 1.快速理解五种IO模式 2.五种IO模型 3.非阻塞IO fcntl() 4.IO多路转接 select select fd_set类型 struct timeval*类型 5.Select的代码测试 5.1 问题一&#xff1a;一开始&#xff0c;我们只有一个listen套接字 5.2 问题二&#xff1…
最新文章