【学习笔记35】JavaScript计算两个指定日期的时间差

news2025/7/14 8:01:02

一、要求

计算两个指定日期的时间差(2023年元旦到来的时间

在这里插入图片描述

二、分析

  1. 先获取到两个时间距离1970(格林尼时间)~~~毫秒数
  2. 计算两个毫秒数的差值 ----> 得到了总毫秒数
  3. 计算总毫秒数内, 有多少个完整的天
    • parseInt(总毫秒数 / 一天的毫秒数)
  4. 用剩余不足一天的毫秒数去计算出时分秒

三、代码实现

    1秒   === 1000毫秒
    1分钟 === 1000*60毫秒
    1小时 === 1000*60*60毫秒
    1天   === 1000*60*60*24毫秒

1、代码实现

        /* 1. 获取当前的时间和指定时间 */
        // 当前时间
        var currentTime = new Date();
        // 指定时间
        var prevTime = new Date('2023-1-1 0:0:0');

        /* 2. 获取当前时间和指定时间到1970(格林尼时间)的毫秒差 */
        var currentTimeMilli = currentTime.getTime();
        var prevTimeMilli = prevTime.getTime();

        // 获取当前时间和指定时间的时间差
        var times = prevTimeMilli - currentTimeMilli;

        /* 4. 计算出 天 时 分 秒 */
        /**
         * 4.1 计算有多少完整的天
         *   计算公式:parseInt(总的毫秒数 / 一天的毫秒数)
         *            parseInt( times / (1000 * 60 * 60 * 24) )
         * 
         * 4.2 计算剩余不足一天的毫秒数
         *   计算公式: 总毫秒 - (完整天数 * 一天的毫秒数)
        */
        // 一天的毫秒数
        var oneDayMilli = 1000 * 60 * 60 * 24;

        // 有多少个完整的天
        var days = parseInt(times / oneDayMilli);

        // 减去完整天数的毫秒数
        leave1 = times - days * oneDayMilli;

        /**
         * 4.3 计算有多少完整的小时
         *   计算公式:parseInt(不足一天的毫秒数 / 一个小时的毫秒数)
         *            parseInt(leave1 / ( 1000 * 60 * 60 ) )
         * 
         * 4.4  计算一下不足一小时的毫秒数
         *   计算公式: leave1 - (完整的小时 * 一小时的毫秒数)
        */

        // 一小时的毫秒数
        var onHoursMilli = 1000 * 60 * 60;

        // 计算出有多少个完整的小时
        var hours = parseInt(leave1 / onHoursMilli);

        // 计算剩余不足一小时的毫秒数
        leave2 = leave1 - hours * onHoursMilli;

        /**
         * 4.5 计算有多少完整的分钟
         *   计算公式: parseInt(leave2 / 一分钟的毫秒数)
         * 
         * 4.6 计算一下不足一分钟的毫秒数
         *   计算公式: leave2 - (完整分钟 * 一分钟的毫秒数)
        */

        // 一分钟的毫秒数
        var oneMinutesMilli = 1000 * 60;

        // 计算出了有多少完整的分钟
        var minutes = parseInt(leave2 / oneMinutesMilli);

        // 计算不足一分钟的毫秒数
        leave3 = leave2 - minutes * oneMinutesMilli;

        /**  
         * 4.8 计算一下有多少完整的秒
         *   计算公式: parseInt(leave3 / 一秒钟的毫秒数)
        */

        var seconds = parseInt(leave3 / 1000);
        document.write(`<h1>距离2023元旦还相差${days}${hours}小时${minutes}分钟${seconds}秒</h1>`);

2、代码优化

        /* 1. 获取当前的时间和指定时间 */
        // 当前时间
        var currentTime = new Date();
        // 指定时间
        var prevTime = new Date('2023-1-1 0:0:0');

        /* 2. 获取当前时间和指定时间的时间差*/
        var times = prevTime.getTime() - currentTime.getTime();

        /* 3. 计算出 天 时 分 秒  */

        // 3.1 计算相差的天数 
        var days = parseInt(times / (1000 * 60 * 60 * 24));

        // 3.2 计算相差小时数
        // 计算天数后剩余的毫秒数
        var leave1 = times % (1000 * 60 * 60 * 24);
        var hours = parseInt(leave1 / (1000 * 60 * 60));

        // 3.3 计算相差分钟数
        // 计算小时后剩余的毫秒数
        var leave2 = leave1 % (1000 * 60 * 60);
        var minutes = parseInt(leave2 / (1000 * 60));

        // 3.4 计算相差的秒数
        // 计算分钟后剩余的毫秒数
        var leave3 = leave2 % (1000 * 60);
        var seconds = parseInt(leave3 / 1000);

        document.write(`<h1>距离2023元旦还相差${days}${hours}小时${minutes}分钟${seconds}秒</h1>`)

三、函数封装

1、函数说明

  • 实际项目中每一个自定义函数(程序员自己写的函数) 必须有函数说明
  • 在实际项目中,函数说明会有具体的格式要求

函数说明的基本格式(内容)

  1. 函数名称,基本作用
  2. 说明参数:数据类型 参数名称 基本说明
  3. 说明返回值:数据类型、返回值名称、基本说明
  4. 函数的执行原理,参数要求,函数的基本说明,越详细越好

2、函数封装

        /**
         * myGetTimeDifference 获取时间差数据
         *     @param    string  endTime       结束时间字符串
         *     @param    string  startTime     起始时间字符串
         *     @return   object                返回时间差的结果的天 小时 分钟 秒
         *     如果没有输出起始时间,以当前时间作为起始时间
        */

        /**
         * 1分钟 === 60秒
         * 1小时 === 60 * 60秒
         * 1天   === 60 * 60 * 24秒
        */
       function myGetTimeDifference(endTime, startTime){
        // 必须要有最终时间
        // 如果没有输入 返回一个报错信息
        if(endTime === undefined) return '您必须输入一个终止时间';

        // 创建终止时间
        // 如果开始时间 startTime 没有实参 当前时间作为起始时间
        var startTimeObj = startTime === undefined ? new Date() : new Date(startTime);
        
        // 计算时间差 转化为秒数
        var time = parseInt((endTimeObj.getTime() - startTimeObj.getTime) / 1000);

        // 总秒数转化为对应的天数
        var days = parseInt(time / (24 * 60 * 60));

        // 计算小时
        var hours = parseInt((time % (24 * 60 * 60)) / (60 * 60));

        // 计算分钟
        var minutes = parseInt((time % (60 * 60)) / 60);

        // 计算秒
        var seconds = time % 60;

        // 以对象的形式返回结果
        return {days, hours, minutes, seconds}
       }

3、函数调用

    <div>当前时间距离元旦放假还有XX天XX小时XX分钟XX秒</div>
    <script src="./qq.js"></script>
        // 通过DOM操作将字符串写入div中
        var oDiv = document.querySelector('div');

        // 通过函数获取时间差数据对象
        var time = myGetTimeDifference();
        // console.log(time);

        oDiv.innerHTML = `<h1>距离2023元旦放假还相差${time.days}${time.hours}小时${time.minutes}分钟${time.seconds}秒</h1>`;

        // 通过定时器将程序每秒重复执行一次
        setInterval(function () {
            // 每次都要重新获取时间差数据
            var time = myGetTimeDifference('2023-1-1 0:0:0');
            console.log(time);

            // 将新的时间差数据写入div标签中
            oDiv.innerHTML = `<h1>距离2023元旦放假还相差${time.days}${time.hours}小时${time.minutes}分钟${time.seconds}秒</h1>`;

        }, 1000)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

会话跟踪技术-session和cookie

会话&#xff08;Session&#xff09;跟踪是Web程序中常用的技术&#xff0c;用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。 Cookie通过在客户端记录信息确定用户身份&#xff0c;Session通过在服务器端记录信息确定用户身份。 Cookie对象与HttpSession对象简…

nginx(六十七)http_ssl模块 client与nginx的ssl握手

一 HTTPS握手机制 关注点&#xff1a; SSL/TLS握手的细节与nginx配置指令的关系核心&#xff1a; 讲解客户端(下游)与作为server端的nginx之间的握手最佳实践&#xff1a; 建议在http块中通过include ssl.conf把共工部分抽离处理ssl/tls报错原因&#xff1a;可能是客户端或服…

Flutter高仿微信-第56篇-搜索好友

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; /*** Author : wangning* Email : maoning20080809163.co…

Java---Stream流详解

目录​​​​​​​ 一、Stream流详解 二、Stream流的获取 &#xff08;1&#xff09;单列集合 &#xff08;2&#xff09;双列集合 &#xff08;3&#xff09;数组 &#xff08;4&#xff09;一些零散数据 三、Stream流中常用的API方法 &#xff08;1&#xff09;中间…

含可再生能源的热电联供型微网经济运行优化_粒子群PSO算法_matlab程序

含可再生能源的热电联供型微网经济运行优化matlab程序 参考文献&#xff1a;含可再生能源的热电联供型微网经济运行优化 热电联供系统具有节能! 环保! 经济等特点" 有着良好的发展前景和应用价值# 文中针对由 风电机组! 光伏电池! 燃料电池! 余热锅炉! 燃气锅炉! 蓄电池以…

含电热联合系统的微电网运行优化附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

SpringBoot+Vue项目投稿和稿件处理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

MYSQL中的锁

全局锁 就是对整个数据库进行加锁&#xff0c;加锁之后整个数据库就处于只读状态&#xff0c;后续的DML写语句&#xff0c;DDL语句&#xff0c;以及对更新事务的提交操作都会被阻塞&#xff0c;典型地使用场景就是做整个数据库的逻辑备份&#xff0c;对所有的表进行锁定&#x…

非凡社群管理之如何高效的进行社群管理

一、初始成员的严格筛选 我们建立社群初期&#xff0c;就要严格筛选初始会员&#xff0c;争取让我们找到的第一批种子用户&#xff0c;就是有着共同的连接点。而不是找到一群人之后&#xff0c;再去培养大家的同好。这样不仅吃力不讨好&#xff0c;往往效果也不太高&#xf…

Kafka系列之:实现Kafka Connect集群访问认证

Kafka系列之:实现Kafka Connect集群访问认证 一、Kafka Connect访问控制二、Kafka Connect技术知识三、详细介绍Kafka connect访问认证实现过程四、启动Kafka Connect集群五、测试Kafka Connect集群访问认证一、Kafka Connect访问控制 实现的效果如下所示: 错误的用户名和密…

nginx降权及匹配php

1.nginx降权 1.1 capabilities的介绍与运用 1.2 用普通用户启动nginx 1.3 root用户权限赋予 1.4 查看普通用户的nginx权限 1.5 查看nginx的欢迎网页 2.nginx与php的相互匹配 2.1 安装php及php-fpm包 2.2 检查php-fpm服务运行状态 2.3 php-fpm上的配置 2.4 nginx上的配…

基于matlab的精馏塔作业模拟仿真

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 原料物性表如下&#xff1a; 表3-1原料物理性质表 组分 质量流率 质量分数 摩尔流率 摩尔分数 分子量 常压沸点 丙烷 472.938 7.567…

SpringBoot SpringBoot 原理篇 1 自动配置 1.9 bean 的加载方式【七】

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.9 bean 的加载方式【七】1.9.1 ImportBeanDefinitionRegistrar1 …

mysql 到底是 join性能好,还是in一下更快呢

先总结&#xff1a; 数据量小的时候&#xff0c;用join更划算数据量大的时候&#xff0c;join的成本更高&#xff0c;但相对来说join的速度会更快数据量过大的时候&#xff0c;in的数据量过多&#xff0c;会有无法执行SQL的问题&#xff0c;待解决 事情是这样的&#xff0c;去…

浅谈Spring Cloud Gateway源码

本文不谈Spring Cloud Gateway相关的使用&#xff0c;仅梳理在微服务项目中&#xff0c;在使用Spring Cloud Gateway做为服务网关后&#xff0c;接收到请求后的大体执行流程。 文章目录大致流程图具体流程一、DispatcherHandler二、getHandler1、getHandlerInternal2、lookupRo…

【GlobalMapper精品教程】027:路径剖面和和视线工具的使用

文章目录 一、路径剖面简介二、创建剖面图1. 加载DEM2. 创建剖面图3. 计算填挖方3. 保存剖面图一、路径剖面简介 路径剖面视线工具允许您使用加载的高程数据集沿用户指定的路径获取垂直剖面。 要定义生成3D路径剖面所遵循的路径,只需单击鼠标左键选择路径的点,然后石键单击…

[acwing周赛复盘] 第 60 场周赛20220716

[acwing周赛复盘] 第 60 场周赛20220716 一、本周周赛总结二、 4722. 数列元素1. 题目描述2. 思路分析3. 代码实现三、4723. 队列1. 题目描述2. 思路分析3. 代码实现四、4724. 靓号1. 题目描述2. 思路分析3. 代码实现六、参考链接一、本周周赛总结 第一次打acwing&#xff0c;…

POJ1007:DNA排序

一、Description One measure of unsortedness in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence DAABEC’‘, this measure is 5, since D is greater than four letters to its ri…

傻白入门芯片设计,典型的2D/2D+/2.5D/3D封装技术(六)

集成电路终于成为了一级学科&#xff0c;对集成电路领域的投入也日益加大&#xff0c;集成电路属于电子集成技术的一种&#xff0c;那么&#xff0c;现在的电子集成技术发展到了什么程度呢&#xff1f; 先进的电子集成技术可以在不到芝麻粒大小的1平方毫米内集成1亿只以上的晶体…

Tableau 合集3:格式设置之可视化图显示百分比和提示工具对齐问题

一、前言 本文通过可视化图中显示不了百分比和提示工具无法对齐两个小问题出发&#xff0c;介绍了关于Tableau设置格式和工具提示的一些使用方法。 环境&#xff1a;Windows11 64位、Tableau desktop 2021.2 二、问题1&#xff1a;可视化图中显示不了百分比 问题描述&#…