使用React实现时间的天数,小时数,分钟数之间的自动转化

2023-11-18

由于公司项目需要使用React实现时间的天数,小时数,分钟数之间的自动转化,在遇了很多坑后终于解决了问题。

需要实现的功能:当用户在输入小时数的时候,超过24小时就自动转化为相应的天数;当用户在输入分钟数的时候,超过60分钟以上就要自动转化成相应的小时数和天数;且要实现再次输入的叠加(当已经是1天12时,输入61分钟;得到的是1天13时1分钟。以此类推)。

  1. 先实现天数、小时数、分钟数的转化函数

    // 日期转化函数
    // 需要实现功能:当在输入了大于等于24小时就转化成相应的天数,当输入了大于等于60分钟就转化成相应的天数和小时数
    // 数值范围:天 时 分 都在0~9999 暂时先不考虑天数超越极限的情况
    
    // 先进行分转化,再统一进行小时转化
    // 传入的参数分别为 时 分
    export default function transformDate(day,hour,min) {
        // 用于存放新生成的天 时 分
        let newDay = 0;
        let newMin = 0;
        let newHour = 0;
        let arr = []
        // 如果小时大于等于60就转化为小时
        if(min >= 60) {
            newMin = min % 60
            newHour = parseInt(min / 60)
        } else {
            newMin = min
        }
        // 将得到的小时数加上,进行统一转化
        hour = hour + newHour
        // 如果天数大于等于24就转化为天数
        if(hour >= 24) {
            newDay = parseInt(hour / 24) + day
            newHour = hour % 24
        } else {
            newHour = hour
        }
        
        arr.push(newDay)
        arr.push(newHour)
        arr.push(newMin)
        // 最后以数组的形式返回
        return arr
    }
    
  2. 将函数导入到需要使用的文件中

    使用的是React的ant design中的inputNumber的onChange监听数字的变化回调,onChange获取到当前输入框内的数字后再放入失去焦点onBlur()中进行函数转化,再更新数据到页面上。

以下是部分实现代码:

这一部分是实现监听输入框内的数字回调

const [payDateDay, setPayDateDay] = useState(0);
  const [payDateHour, setPayDateHour] = useState(0);
  const [payDateMin, setPayDateMin] = useState(0);
  const [shipDateDay, setShipDateDay] = useState(0);
  const [shipDateHour, setShipDateHour] = useState(0);
  const [shipDateMin, setShipDateMin] = useState(0);
  
  const transformPayDay= (payDateDay:number) => {
    setPayDateDay(payDateDay)
  }

  const transformPayHour= (payDateHour:number) => {
    setPayDateHour(payDateHour)
  }

  const transformPayMin= (payDateMin:number) => {
    setPayDateMin(payDateMin)
  }

  const transformShipDay= (shipDateDay:number) => {
    setShipDateDay(shipDateDay)
  }

  const transformShipHour= (shipDateHour:number) => {
    setShipDateHour(shipDateHour)
  }

  const transformShipMin= (shipDateMin:number) => {
    setShipDateMin(shipDateMin)
  }

这一部分是实现时间转化

{
            field: (ctx:any) => {
                return ( 
                  <AntdForm.Item
                  name="month"
                  label='未支付订单'
                  rules={[{ required: true, message: '未支付订单不能为空' }]}
                  extra={'#到达设置时间后订单由系统自动关闭,设置都为0默认不关闭'}
                  >
                    <InputNumber
                    min={0}
                    max={9999}
                    defaultValue={0}
                    value={payDateDay}
                    style={{ width: '25%' }}
                    onChange={transformPayDay}
                    />
                    <span>&nbsp;&nbsp;</span>
                    <InputNumber
                    min={0}
                    max={9999}
                    defaultValue={0}
                    value={payDateHour}
                    style={{ width: '25%' }}
                    onChange={transformPayHour}
                    onBlur={() => {
                      if(payDateHour >= 24) {
                        setPayDateDay(TransformDate(payDateDay,payDateHour,payDateMin)[0])
                        setPayDateHour(TransformDate(payDateDay,payDateHour,payDateMin)[1])
                        setPayDateMin(TransformDate(payDateDay,payDateHour,payDateMin)[2])
                        if((payDateDay + (payDateHour / 24)) > 9999) {
                          alert('天数的取值范围为0~9999!')
                        }
                      }
                    }}
                    />
                    <span>&nbsp;&nbsp;</span>
                    <InputNumber
                    min={0}
                    max={9999}
                    defaultValue={0}
                    value={payDateMin}
                    style={{ width: '25%' }}
                    onChange={transformPayMin}
                    onBlur={() => {
                      if(payDateMin >= 1440) {
                        setPayDateDay(TransformDate(payDateDay,payDateHour,payDateMin)[0])
                        setPayDateHour(TransformDate(payDateDay,payDateHour,payDateMin)[1])
                      } else if(payDateMin >= 60) {
                        setPayDateHour(TransformDate(payDateDay,payDateHour,payDateMin)[1])
                      }
                      if((payDateDay + (payDateHour / 24) + (payDateMin / 1440)) > 9999) {
                        alert('天数的取值范围为0~9999!')
                      }
                        setPayDateMin(TransformDate(payDateDay,payDateHour,payDateMin)[2])
                    }}
                    />
                    <span>&nbsp;后自动关闭订单</span>
                  </AntdForm.Item>
                );
            }
        },

为什么说遇到了很多坑呢,一开始想的是使用onChange变化回调监听数字变化就能实现功能,可是在使用过程中我发现,在输入的过程中当前输入框内的数字不会发生变化。因为是在鼠标离开输入框的一瞬间,输入框内的数字还是当前数字,所以onChange又进行了一次回调,导致数据进行了叠加。就比如说我输入0天0时120分钟,当输入的是120分钟时会立马出现2时,当光标离开输入框后会出现叠加,变成了0天4时0分。所以这样是不可行的,就想到使用离开光标的方法,这还是要使用到onChange来获取当前数字来实现转化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用React实现时间的天数,小时数,分钟数之间的自动转化 的相关文章

  • 自动检测log4j静态初始化错误的方法

    请注意 这更像是 Bash 问题 而不是 Java 问题 请参阅下面的注释 在每个类中配置log4j时 我们执行以下操作 public class Example private static final Logger log Logger
  • 如何禁用向左滚动?

    I got a div 元素 parent 包含多个子元素 item 我想启用滚动父元素一个方向 left OR正确的 否则什么都不会发生 看我的代码 parent scroll function gt gt gt scroll event
  • 单击 div 中的图像时如何翻转该 Div?

    好吧 我对编写 Javascript 知之甚少 我可以对其进行一些编辑 并且涉足了 CSS3 动画 我将向您展示我正在努力实现的目标 然后在下面进行解释 网站布局将是这样的 https i stack imgur com RMb4R jpg
  • React i18next languageChanged 事件被多次调用

    我在我的 React js 应用程序中使用 i18next 进行翻译 我在 Header jsx 文件中添加了所有页面通用的语言下拉列表 我正在根据其中一个页面中的当前语言获取数据quiz jsx 因此 在语言更改时应该再次调用 api 问
  • 测试 Hessian remoting-servlet.xml

    我们使用 Hessian 来实现富客户端和服务器之间的通信 由于移动和重命名 remoting servlet xml 中的条目有时会与实际的类名不匹配 因此 我正在寻找一种简单的方法来测试远程处理 xml 有没有简单的方法可以做到这一点
  • 在 Jest 测试中设置时刻时区

    我有 util 函数 它以特定的日期格式解析给定的日期 即 2019 01 28 然后使用momentJS检索当天的开始并将其转换为 ISO 日期格式 dates js import moment from moment export co
  • 飞碟中的外部 CSS

    我想知道如何在 Flying Saucer 中包含外部 CSS 在此之前THB我检查了所有可用的链接StackOverflow但它们没有帮助 这就是为什么我自己做这个的原因 TestCSS xhtml重命名版本TestCSS html 所以
  • 如何使用javascript通过类名更改html元素的值

    这是我用来更改 html 元素值的代码 a class classname href Vtech com This text to be chnage a 如何在页面加载瞬间更改此文本 看来你需要添加DOMContentLoaded或者把你
  • 是否可以从 JBoss 容器中部署的所有 .war 文件中读取属性文件

    我已成功将 war 部署到 Jboss Web 容器 其中包含并读取位于 META INF groupid dir artifactid dir 下的 pom properties 为了访问该文件 我在同一 war 中的 JSP 中使用了以
  • 如何知道一个点是否在复杂的 3D 形状内(.ply 文件)

    我正在研究一个Java女巫项目真是要了我的命 经过几天在不同论坛上的研究 寻找我真正需要的东西 我来寻求你的帮助 我的数据 ply 文件 包含由许多三角形组成的 3D 形状 一个点 3D坐标 我想知道这个点是否包含在复杂的 3D 形状内 我
  • Spring Oauth2. DaoAuthenticationProvider 中未设置密码编码器

    我对 Spring Oauth 和 Spring Security 很陌生 我正在尝试在我的项目中使用 client credentials 流程 现在 我设法使用自己的 CustomDetailsS ervice 来从系统中已存在的数据库
  • 允许在 Safari 上聊天应用程序使用 audio.play()

    由于苹果禁用了自动播放音频的功能HTMLMedia Element play https developer mozilla org en US docs Web API HTMLMediaElement play在没有用户交互的 java
  • 用空字符串替换状态:Javascript

    我有这个网址 website com con blog true 我在 javascript 中所做的是 if getURLparams blog RandomFunction change the url window history r
  • 图像未显示在从 HTML 创建的 PDF 上

    我想动态创建 PDF 这意味着我将从 Google Drive 获取文件 然后将它们放入 HTML 代码中 并尝试从中创建 PDF 一切工作正常 除了图像没有显示 我现在正在做的是 从 HTML 字符串创建 HtmlOutput 获取该 H
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • SWIG C 函数指针和 JAVA

    我有一些 C 代码 其中一个方法有一个函数指针作为参数 我正在尝试在我的 Android 应用程序中使用 C 代码 我决定使用 SWIG 来完成生成我需要的 java 文件的所有工作 一切都适用于常规函数 没有函数指针作为参数的函数 但我不
  • 如何在画布中旋转图表同时保持数字垂直?

    我正在尝试围绕其中心旋转画布中的图表 同时保持字母直立 我正在尝试使用 ctx rotate 但它使用画布的左侧作为中心来旋转整个图表 以下链接提供了视觉效果 我希望它看起来像绿色 而不是红色 就像我的代码当前所做的那样 视觉解释 http
  • POJO 支持使用omnifaces 自动完成primefaces

    我正在尝试在我的项目中使用 primefaces 自动完成组件 以避免将特定转换器写入我尝试使用的每个列表对象全能面孔 http showcase omnifaces org converters ListConverter如建议的here
  • 仅使用 javascript 获取网站的正文元素

    我想检索以下网站的正文内容http sports espn go com nhl bottomline scores nhl s left1 http sports espn go com nhl bottomline scores nhl
  • 使用 JQueryUI Autocomplete 和 Meteor 的规范方法

    使用 Meteor 我想了解使用 JQuery UI 自动完成处理大量服务器端数据的最有效方法 我有两个工作提案 想听听关于差异的意见 以及是否有更好的方法来做同样的事情 使用发布 订阅 Server Meteor publish auto

随机推荐

  • ubuntu编译安装mmcv 1.6.2和mmsegmentation 0.28.0

    环境 ubuntu16 04 cuda10 1 python 3 8 pytorch 1 6 0 cuda10 1 对应的torch版本 lt 1 8 但是1 8和1 7都试了 mmcv没有编译成功 只有1 6成功了 1 编译MMCV 1
  • 行为型模式-策略模式

    package per mjn pattern strategy 抽象策略类 public interface Strategy void show package per mjn pattern strategy 具体策略类 用来封装算法
  • warning: function declared implicitly错误原因

    http blog sina com cn s blog 629f56a70100irbn html line 10 warning function declared implicitly 这是由于没有声明函数原型造成的 在a c中 vo
  • Vue插件

    目录 vue项目目录结构 es6导入导出语法 Vue项目开发规范单页面组件写法 vue项目集成axios vue项目前后端打通 前后端交互之登录功能 props配置项 父组件通过自定义属性与子组件通信 混入 插件 scoped样式 loca
  • c语言socket如何传输图片,socket文件传输功能的实现

    这节我们来完成 socket 文件传输程序 这是一个非常实用的例子 要实现的功能为 client 从 server 下载一个文件并保存到本地 编写这个程序需要注意两个问题 1 文件大小不确定 有可能比缓冲区大很多 调用一次 write se
  • 如何理解面向过程和面向对象?

    一句话理解面向对象 有人说 如果上帝是程序员 他怎么创造世界上的所有动物 理解这个问题就理解了面向对像 面向过程和面向对象区别 面向过程的思路 什么事都自己做 分析解决问题所需的步骤 用函数把这些步骤依次实现 面向对象的思路 什么事都指挥对
  • 可连接点对象及示例(二)

    转载请标明是引用于 http blog csdn net chenyujing1234 例子代码 包括客户端与服务端 http www rayfile com zh cn files de82908f 7309 11e1 9db1 0015
  • 域名怎么解析到服务器上

    今天无事说一说如何把自己的域名解析绑定到自己的服务器上 让访客们可以通过你的域名来访问你的网站 域名解析定义 域名解析是把域名指向网站空间IP 让人们通过注册的域名可以方便地访问到网站的一种服务 IP地址是网络上标识站点的数字地址 为了方便
  • pytorch 中 多头注意力机制 MultiHeadAttention的代码实现及应用

    本文将对 Scaled Dot Product Attention Multi head attention Self attention Transformer等概念做一个简要介绍和区分 最后对通用的 Multi head attenti
  • klocwork 2020.3安装使用过程

    klocwork 2020 3 1 安装过程略过 可查看2019的安装过程 2 web分析 存在漏报的问题 可能是规则选择不全 3 desktop分析 4 嵌入式环境插件分析 e mail lu1024lu foxmail com
  • 软件著作权申请注意事项——常见问题[详细版,不断补充中]

    近期在申请几个软著 查询了大量资料 打了很多电话 经过几次 亲身尝试后 总结出了以下要点问题 基本涵盖了目前网上搜不到的一些注意事项 如有问题欢迎在评论中一起讨论 2020年8月上线了新系统 本说明进行了相应调整 请先阅读 0 新系统计算机
  • 开源库jemalloc简介

    jemalloc是通用的malloc 3 实现 它强调避免碎片和可扩展的并发支持 它的源码位于https github com jemalloc jemalloc 最新稳定版本为5 2 1 glibc的内存分配算法是基于dlmalloc实现
  • Two Arithmetic Progressions

    Two Arithmetic Progressions 题目链接 题意 思路 AC代码1 include
  • .NET Core + K8S 玩转容器编排

    Production Grade Container Orchestration Automated container deployment scaling and management 生产级别的容器编排系统 自动化的容器部署 扩展和管
  • RTMP协议与RTSP协议比较

    考虑做一个手机直播系统 首先需要指定一个合理的技术方案 由于自己以前不是搞多媒体这块 对流媒体开发不熟悉 自己的理解思维总习惯用java web开发的惯性走 先指定一个大体的框架 不管对还是错 先考虑其技术可行性 框架的指定 首先取决于自己
  • 代码走查——项目走向成功的锦囊之一

    说起代码走查 相信每个人都不陌生 但为什么要执行代码走查 什么时候来执行代码走查 如何有效执行代码走查 很多人的看法和见解都不一样 一般的看法 认为代码走查是一种非正式的代码评审技术 它通常在编码完成之后由代码的作者向一组同事来讲解他自己编
  • mysql5.7防火墙_mysql 5.7.13 winx64安装配置方法图文教程(win10)

    本文实例为大家分享了mysql 5 7 13 winx64安装配置方法图文教程 供大家参考 具体内容如下 下载 安装 1 解压下载好的mysql 5 7 13 winx64 zip到你需要安转的目录 eg D mysql 2 配置解压目录下
  • openwrt用git https错误:fatal unable to find remote helper for ‘https‘

    opkg update opkg remove git opkg install git http opkg install ca bundle
  • java连接多个mysql_java – MySql连接太多了

    使用您的方法 如果在调用conn close 之前抛出任何异常 则永远不会关闭连接 您需要在try块中获取它 以及语句和结果集 并在finally块中将其关闭 无论是否抛出异常 都将始终执行finally中的任何代码 有了这个 您可以确保关
  • 使用React实现时间的天数,小时数,分钟数之间的自动转化

    由于公司项目需要使用React实现时间的天数 小时数 分钟数之间的自动转化 在遇了很多坑后终于解决了问题 需要实现的功能 当用户在输入小时数的时候 超过24小时就自动转化为相应的天数 当用户在输入分钟数的时候 超过60分钟以上就要自动转化成