/* 时间格式:2016-8-31 10:35:00 或 2016/8/31 10:35:00 */

var dateObj=dayCha('2016-8-17','2019-6-30') //执行方法,参数为时间,第二个时间未填默认为当前时间。

方法一:

function dayCha(time, twoTime) {time = time.replace(new RegExp("-", "gm"), "/");if (twoTime) {twoTime = twoTime.replace(new RegExp("-", "gm"), "/");}else {twoTime = new Date();}// 计算比较日期const getMaxMinDate = (time, twoTime, type) => {let minTime = new Date(time).getTime() - new Date(twoTime).getTime() > 0 ? twoTime : timelet maxTime = new Date(time).getTime() - new Date(twoTime).getTime() > 0 ? time : twoTimelet maxDateDay = new Date(new Date(maxTime).getFullYear(), new Date(maxTime).getMonth() + 1, 0).getDate()let maxMinDate = new Date(minTime).getDate() > maxDateDay ? maxDateDay : new Date(minTime).getDate()let maxMinTong = nullif (type == 'month') {maxMinTong = new Date(maxTime).getFullYear() + '/' + (new Date(minTime).getMonth() + 1) + '/' + maxMinDate + ' ' + new Date(minTime).toLocaleTimeString('chinese',{hour12:false})} else {maxMinTong = new Date(maxTime).getFullYear() + '/' + (new Date(maxTime).getMonth() + 1) + '/' + maxMinDate + ' ' + new Date(minTime).toLocaleTimeString('chinese',{hour12:false})}return {minTime,maxTime,maxMinTong}}// 相差年份const getYear = (time, twoTime) => {let oneYear = new Date(time).getFullYear()let twoYear = new Date(twoTime).getFullYear()// 计算出与最小日期的日时分相同的最大日期的值// 如2016-8-17和2019-6-30,计算出来的maxMinTong为2019-8-17const { minTime, maxTime, maxMinTong } = getMaxMinDate(time, twoTime, 'month')// 计算相差多少年let chaYear = Math.abs(oneYear - twoYear)// 如果计算出的maxMinTong(如2019-8-17)大于了最大日期,则表示最后一年没有满,需要减一if (new Date(maxMinTong).getTime() > new Date(maxTime).getTime()) {chaYear--}return chaYear}const getMonthTong = (time, twoTime) => {let oneMonth = new Date(time).getFullYear() * 12 + (new Date(time).getMonth() + 1)let twoMonth = new Date(twoTime).getFullYear() * 12 + (new Date(twoTime).getMonth() + 1)return Math.abs(oneMonth - twoMonth)}// 相差月份const getMonth = (time, twoTime, value) => {// 计算出与最小日期的日时分相同的最大日期的值// 如2016-8-17和2019-6-30,计算出来的maxMinTong为2019-6-17const { minTime, maxTime, maxMinTong } = getMaxMinDate(time, twoTime, 'day')// 计算最小日期到maxMinTong(如2019-6-17)的月份,这样刚好对应月日let chaMonth = getMonthTong(minTime, maxMinTong)// 如果计算出来的maxMinTong(如2019-6-17)大于最大日期,则表示最后一月没有满,需要减一if (new Date(maxMinTong).getTime() > new Date(maxTime).getTime()) {chaMonth--}if (value) {return chaMonth - value} else {return chaMonth}}// 相差天数const getDay = (time, twoTime, value) => {let chaTime = Math.abs(new Date(time).getTime() - new Date(twoTime).getTime());if (value) {return parseInt(chaTime / 86400000) - value} else {return parseInt(chaTime / 86400000)}}// 相差小时const getHour = (time, twoTime, value) => {let chaTime = Math.abs(new Date(time).getTime() - new Date(twoTime).getTime());if (value) {return parseInt(chaTime / 3600000) - value} else {return parseInt(chaTime / 3600000)}}// 相差分钟const getMinute = (time, twoTime, value) => {let chaTime = Math.abs(new Date(time).getTime() - new Date(twoTime).getTime());if (value) {return parseInt(chaTime / 60000) - value} else {return parseInt(chaTime / 60000)}}// 相差秒const getSecond = (time, twoTime, value) => {let chaTime = Math.abs(new Date(time).getTime() - new Date(twoTime).getTime());if (value) {return parseInt(chaTime / 1000) - value} else {return parseInt(chaTime / 1000)}}// 相差年月日时分秒const getDffeYMDHMS = (time, twoTime) => {// 计算出与最小日期的日时分相同的最大日期的值// 如2016-8-17和2019-6-30,计算出来的maxMinTong为2019-6-17const { minTime, maxTime, maxMinTong } = getMaxMinDate(time, twoTime, 'day')// 计算最小日期到(如:2019-6-17)的天数,这样算出来的天数刚好数足月的let dffeDay1 = getDay(minTime, maxMinTong)// 判断一下,如果计算出来的(如:2019-6-17)大于最后的日期(如2019-6-30)就需要减去(2019-6-30到2019-6-17的天数,否则不需要)if (new Date(maxMinTong).getTime() > new Date(maxTime).getTime()) {let prevMonth = new Date(maxMinTong).getMonth() - 1let lastTime=new Date(maxMinTong).setMonth(prevMonth)dffeDay1 = dffeDay1 - getDay((new Date(lastTime).getFullYear() + '/' + (new Date(lastTime).getMonth()+1) + '/' + new Date(lastTime).getDate()), maxMinTong)}let dffeYear = getYear(time, twoTime)let dffeMonth = getMonth(time, twoTime, dffeYear * 12)let dffeDay = getDay(time, twoTime, dffeDay1)let dffeHour = getHour(time, twoTime, getDay(time, twoTime) * 24)let dffeMinute = getMinute(time, twoTime, (getDay(time, twoTime) * 24 * 60 + dffeHour * 60))let dffeSecond = getSecond(time, twoTime, (getDay(time, twoTime) * 24 * 60 * 60 + dffeHour * 60 * 60 + dffeMinute * 60))console.log(`年:${dffeYear},月:${dffeMonth},日:${dffeDay},时:${dffeHour},分:${dffeMinute},秒:${dffeSecond}`)return { dffeYear, dffeMonth, dffeDay, dffeHour, dffeMinute, dffeSecond }}// 相差年月周日时分秒const getDffeYMWDHMS = (time, twoTime) => {// 计算出与最小日期的日时分相同的最大日期的值const { minTime, maxTime, maxMinTong } = getMaxMinDate(time, twoTime, 'day')let dffeDay1 = getDay(minTime, maxMinTong)// 如果大于了,就需要减掉多余天数if (new Date(maxMinTong).getTime() > new Date(maxTime).getTime()) {let prevMonth = new Date(maxMinTong).getMonth() - 1let lastTime=new Date(maxMinTong).setMonth(prevMonth)dffeDay1 = dffeDay1 - getDay((new Date(lastTime).getFullYear() + '/' + (new Date(lastTime).getMonth()+1) + '/' + new Date(lastTime).getDate()), maxMinTong)}let dffeYear = getYear(time, twoTime)let dffeMonth = getMonth(time, twoTime, dffeYear * 12)let dffeDayZong = getDay(time, twoTime, dffeDay1)let dffeWeek = parseInt(dffeDayZong / 7)let dffeDay = dffeDayZong - dffeWeek * 7let dffeHour = getHour(time, twoTime, getDay(time, twoTime) * 24)let dffeMinute = getMinute(time, twoTime, (getDay(time, twoTime) * 24 * 60 + dffeHour * 60))let dffeSecond = getSecond(time, twoTime, (getDay(time, twoTime) * 24 * 60 * 60 + dffeHour * 60 * 60 + dffeMinute * 60))console.log(`年:${dffeYear},月:${dffeMonth},周:${dffeWeek},日:${dffeDay},时:${dffeHour},分:${dffeMinute},秒:${dffeSecond}`)return { dffeYear, dffeMonth, dffeWeek, dffeDay, dffeHour, dffeMinute, dffeSecond }}let chaYear = getYear(time, twoTime)let chaMonth = getMonth(time, twoTime)let chaDay = getDay(time, twoTime)let chaHour = getHour(time, twoTime)let chaMinute = getMinute(time, twoTime)let chaSecond = getSecond(time, twoTime)return {chaYear, chaMonth, chaDay, chaHour, chaMinute, chaSecond,getDffeYMDHMS: getDffeYMDHMS(time, twoTime),getDffeYMWDHMS: getDffeYMWDHMS(time, twoTime)}}

具体详细解说

方法二:

function dayCha(startime,endtime){startime = startime.replace(new RegExp("-","gm"),"/");//转换-变为/endtime = endtime.replace(new RegExp("-","gm"),"/");var minTime = new Date(startime).getTime()>new Date(endtime).getTime()?endtime:startimevar maxTime = new Date(startime).getTime()>new Date(endtime).getTime()?startime:endtimevar start       = new Date(minTime);var startYear   = start.getFullYear(); //开始年份var startMonth  = start.getMonth() + 1;//开始月份var end      = new Date(maxTime);var endYear  = end.getFullYear(); //结束年份var endMonth = end.getMonth() + 1;//结束月份//  年var mideleYear=new Date(minTime)mideleYear.setFullYear(endYear)var years = Math.abs(mideleYear.getFullYear() - start.getFullYear());if(mideleYear.getTime()>end.getTime()){years--}// 月
var mideleMonthDay = new Date(minTime)
mideleMonthDay.setFullYear(endYear)
mideleMonthDay.setMonth(endMonth-1)
console.log(mideleMonthDay.toLocaleDateString())
var months = (endYear*12+endMonth) - (startYear*12+startMonth) - years*12
if(mideleMonthDay.getTime()>end.getTime()){months--
}// 日
var day = (Math.floor((end.getTime() - start.getTime()) / 24 / 60/ 60 / 1000))
if(end.getTime()> mideleMonthDay.getTime()){day = (Math.floor( (end.getTime() - mideleMonthDay.getTime()) / 24 / 60/ 60 / 1000)) - day
}else{let prevMonthDay = new Date(mideleMonthDay)prevMonthDay.setMonth(endMonth-2)day = (Math.floor((end.getTime() - prevMonthDay.getTime()) / 24 / 60/ 60 / 1000))
}var chaTime = end.getTime() - start.getTime()var chaDay = Math.floor(chaTime / 24 / 60/ 60 / 1000)var hour = Math.floor(chaTime / 60/ 60 / 1000) - chaDay*24var min = Math.floor(chaTime / 60 / 1000) - chaDay*24*60 - hour*60var sec =  Math.floor(chaTime / 1000) - chaDay*24*60*60 - hour*60*60 - min*60var chastr = years+'年/'+months+'月/'+day+'天 '+hour+'时:'+min+'分:'+sec+'秒';console.log('相差时间:'+chastr);
}

js计算两个时间相差的年、月、日、时、分、秒。相关推荐

  1. js将当前时间格式化为年-月-日 时:分:秒

    利用js的Date()对象,将系统当前时间格式化为年-月-日 时:分:秒.也可以自己定义格式.(做项目时遇到这个问题.本来想百度一个用,哎,网上的结果太乱了,于是自己写一个) 代码如下: <!D ...

  2. java计算两个时间相差几个月

    //计算两个时间相差几个月public int getMonth(Date start, Date end) {if (start.after(end)) {Date t = start;start ...

  3. Excel计算将时间字符串转换为时间格式 年-月-日 时:分:秒 且计算时间差得到 时分秒 格式

    Excel计算时间差时分秒 今天数据导出处理的时候碰见一个时间格式问题如下: 这个日期数据从数据库里导出来就是字符串了,由于取出来的还有一些很长的编码形式的字段怕被隐没,所以将数据粘贴之前我将exce ...

  4. [转载] 用python 获取当前时间(年-月-日 时:分:秒),并且返回当前时间的下一秒

    参考链接: Python获取当前时间 获取当前时间,并且返回当前时间的下一秒 因为存在年-月-日 时:分:秒 考虑到用split的方法做的话非常麻烦 所以引入time和datetime模块 当然 也可 ...

  5. 汇编语言:以“年/月/日 时:分:秒”的格式,显示当前的日期、时间。

    题目:访问cmos ram,用汇编语言编程,以"年/月/日 时:分:秒"的格式,显示当前的日期.时间. 我编写的程序是用直接写显存的方式,在屏幕中间显示系统的当前时间. 但是,有两 ...

  6. 用python 获取当前时间(年-月-日 时:分:秒),并且返回当前时间的下一秒

    获取当前时间,并且返回当前时间的下一秒 因为存在年-月-日 时:分:秒 考虑到用split的方法做的话非常麻烦 所以引入time和datetime模块 当然 也可以改写成输入一个时间 代码实现 imp ...

  7. 时间戳格式化为正常时间 (年-月-日 时:分:秒)

    时间格式化 做项目的时候往往后台返回的时间数据不是我们想要的形式 如 (年-月-日 时:分:秒) 那要自己写代码来转换格式 下面代码可以快速格式化时间,建议收藏 代码如下 let time = '20 ...

  8. js计算两个时间是否大于一个月

    转载自 miskss /*** 获取某年某月的总天数* @param {Number} year 获取天数的年份* @param {Number} month 获取天数的月份* @returns {N ...

  9. c语言编程获取当前系统时间包含年,月,日,时,分,秒.,C语言获取系统时间的几种方式...

    核心提示:C语言中如何获取时间?精度如何?1使用time_ttime(time_t*timer)精确到秒2使用clock_tclock()得到的是CPU时间精确到1/CLOCKS_PER_SEC秒3计 ...

  10. JS获取日期(年/月/日/时/分/秒)以及完整格式转化(补0)

    var myDate = new Date(); myDate.getYear();        //获取当前年份(2位) myDate.getFullYear();    //获取完整的年份(4位 ...

最新文章

  1. OPENCV计算图片间转换关系
  2. 设计模式--代理(Proxy)模式
  3. SM13: 分析SAP事务提交时的FM调用
  4. matlab制作小工具,Matlab有用的小工具小技巧
  5. 实现一个基于动态代理的 AOP
  6. 内固定取出术后护理_股骨内固定钢板取出术后护理查房记录范文
  7. 作者:孟磊,山东省农业信息中心助理农经师。
  8. sql 获取第10到20个记录
  9. 嵌入式Linux培训开发
  10. 【搜索引擎】强推!最好用资源最全的十个百度网盘搜索引擎
  11. 操作系统的位数决定寻址空间
  12. cad计算机清空按键,cad delete键不能用怎么办-解决cad按delete键不能删除的方法 - 河东软件园...
  13. 2022身份识别技术大会 | 安全证件 | 可信身份认证 | 生物识别 | 公共安全安防身份技术展览会
  14. 使用Python脚本读取fasta文件
  15. 闯荡Linux帝国:nginx的创业故事
  16. object标签属性详解
  17. 戴尔c语言编译器如何安装,戴尔的显示屏该怎么安装?精彩图解教程
  18. ThinkPad 水货笔记本
  19. ImageNet图像库1000个类别名称(中文注释不断更新)
  20. Win10 64位下载与安装 MySQL 5.7.30

热门文章

  1. ora-27100产生的原因分析
  2. 微软打补丁出现“此更新不适用于您的计算机”
  3. 重型吉他混音|这吉他没混直接发!如何快速得到凶猛的吉他音色?野兽IR| MZD Studios
  4. 第6章 详细设计(软件工程导论 第6版)
  5. php怎么安装ecshop,ECSHOP4.0安装教程【ECSHOP4.0安装流程方法】ECSHOP4.0安装步骤-ECSHOP教程网...
  6. Olivetti PR2/PR2E 打印机参数设置
  7. FairyGUI按钮动效的混用
  8. Transfer Learning 迁移学习的相关知识
  9. 一场Pandas与SQL的巅峰大战
  10. 交通事故现场拍照技巧