js 取时间差去掉周六周日实现代码

要计算时间差并去掉周六周日,我们可以使用 JavaScript 内置的 Date 对象,它提供了许多方法来处理日期和时间。以下是实现这个功能的步骤:

  1. 获取开始时间和结束时间的 Date 对象。

我们可以使用 Date 对象的构造函数来创建具有指定日期和时间的日期对象。例如,我们可以这样创建一个代表 2021 年 1 月 1 日的 Date 对象:new Date('2021-01-01')

  1. 计算时间差。

我们可以使用 Date 对象的 getTime() 方法来获取日期的 Unix 时间戳,它表示从 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。然后我们可以将结束时间的时间戳减去开始时间的时间戳,得到它们之间的时间差。例如:

const startTime = new Date('2021-01-01');
const endTime = new Date('2021-01-05');
const timeDiff = endTime.getTime() - startTime.getTime();
  1. 去掉周六周日。

为了去掉周六周日,我们需要检查日期对象的 getDay() 方法返回的数字是否为 0 或 6,这意味着它是周六或周日。如果是,我们将时间差减去这一天的毫秒数。

以下是一个完整的示例代码,它计算给定日期范围内去掉周六周日后的毫秒数差:

function getTimeDiffWithoutWeekend(startDate, endDate) {
  const DAY_IN_MS = 1000 * 60 * 60 * 24;
  const startTime = new Date(startDate);
  const endTime = new Date(endDate);
  let timeDiff = endTime.getTime() - startTime.getTime();
  const startDayOfWeek = startTime.getDay();
  const endDayOfWeek = endTime.getDay();

  // 如果开始时间是周六或周日,则将开始时间调整到下周一
  if (startDayOfWeek === 6) {
    startTime.setDate(startTime.getDate() + 2);
    timeDiff -= DAY_IN_MS * 2;
  } else if (startDayOfWeek === 0) {
    startTime.setDate(startTime.getDate() + 1);
    timeDiff -= DAY_IN_MS;
  }

  // 如果结束时间是周六或周日,则将结束时间调整到上周五
  if (endDayOfWeek === 6) {
    endTime.setDate(endTime.getDate() - 1);
    timeDiff -= DAY_IN_MS;
  } else if (endDayOfWeek === 0) {
    endTime.setDate(endTime.getDate() - 2);
    timeDiff -= DAY_IN_MS * 2;
  }

  // 计算周六和周日的天数
  const weekendDays = Math.floor(timeDiff / DAY_IN_MS / 7) * 2;
  // 如果开始和结束时间都不是周六或周日,但它们之间跨越了周六或周日,则将对应的天数减去
  if (startDayOfWeek < endDayOfWeek) {
    if (startDayOfWeek === 0 && endDayOfWeek === 6) {
      weekendDays -= 1;
    } else {
      weekendDays -= 2;
    }
  }

  // 返回去掉周六周日的毫秒数差
  return timeDiff - weekendDays * DAY_IN_MS;
}

以下是两个示例,它们分别计算从 2021 年 1 月 1 日到 2021 年 1 月 5 日和从 2021 年 5 月 1 日到 2021 年 5 月 31 日的时间差,去掉其中的周六周日:

console.log(getTimeDiffWithoutWeekend('2021-01-01', '2021-01-05')); // 259200000
console.log(getTimeDiffWithoutWeekend('2021-05-01', '2021-05-31')); // 1872000000

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js 取时间差去掉周六周日实现代码 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JS实现HTML标签转义及反转义

    HTML中的特殊字符,如尖括号、引号、和符号等,需要进行转义才可以在HTML文本中正常显示。而JS提供了很方便的方法来实现HTML标签的转义及反转义。下面是一份JS实现HTML标签转义及反转义的完整攻略。 转义HTML标签 HTML中的特殊字符,如尖括号、引号、和符号等,需要进行转义才可以在HTML文本中正常显示。JS提供了 htmlentities 函数来…

    JavaScript 2023年5月19日
    00
  • jQuery Animation实现CSS3动画示例介绍

    jQuery Animation实现CSS3动画示例介绍 介绍 jQuery是一个广泛使用的JavaScript库,可以简化HTML文档遍历、事件处理、动画设计等步骤。CSS3也提供了丰富的动画效果,但CSS3并不支持像JavaScript一样的条件判断和循环控制,这就限制了CSS3的灵活性。因此,jQuery动画实现了一些CSS3动画的效果,并且为它们添加…

    JavaScript 2023年6月10日
    00
  • 让我们一起来学习一下什么是javascript的闭包

    下面就来详细讲解一下“让我们一起来学习一下什么是javascript的闭包”的攻略。 什么是闭包? 闭包其实指的是一种能够访问外部函数作用域中变量的函数,也就是说,在一个函数内部定义的函数能够访问到这个函数的作用域中的变量。同时,这个内部函数也可以在外部被引用和调用。这里可以理解为函数自身以及函数被调用时所处的上下文环境。 闭包的实现原理 在JavaScri…

    JavaScript 2023年6月10日
    00
  • 深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性

    深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性 介绍 在JavaScript中,字符串是最常用的数据类型之一,在实际开发中,经常会遇到需要对字符串进行操作的情况。其中,slice、substr、substring是JavaScript内置的三个字符串操作方法,它们可以用来获取、修改字符串中的部分内容。本…

    JavaScript 2023年5月28日
    00
  • JavaScript数组常用方法解析及数组扁平化

    首先我们来分别解析JavaScript数组常用方法和数组扁平化。 Part 1:JavaScript数组常用方法解析 JavaScript数组是一种非常常用的数据类型,有很多常用方法可以操作数组。以下是一些常用方法的详细解析: push():向数组的末尾添加一个元素 语法:array.push(element1, element2, …, element…

    JavaScript 2023年5月27日
    00
  • JavaScript中数组去重的5种方法

    “JavaScript中数组去重的5种方法”是一个常见的问题,本文将详细讲解五种不同的去重方法。 方法一:使用ES6的Set ES6中新增的Set是一种数据结构,可以用于存储任何类型的唯一值。我们可以使用Set去重一个数组,然后再将其转换为数组类型。 let arr = [1, 2, 2, 3, 3, 4, 5]; let uniqueArr = Array…

    JavaScript 2023年5月27日
    00
  • javascript中的try catch异常捕获机制用法分析

    JavaScript中的try-catch异常捕获机制用法分析 什么是try-catch? 在JavaScript中,try-catch结构是一种异常捕获机制。它用于检测和处理代码中的错误,有助于提高程序的容错性,同时能够更好地调试代码。 try-catch结构由try块和捕获异常的catch块组成。try块中包含可能会出现异常的代码段,catch块可以捕获…

    JavaScript 2023年5月28日
    00
  • javascript中的delete使用详解

    当我们在JavaScript中使用delete关键字时,它有两种用途: 删除对象的属性 删除对象本身 下面,我们将逐一介绍这两种情况。 删除属性 在JavaScript中,我们可以删除一个对象的属性。我们可以使用delete关键字来删除属性。如下: let obj = { foo: true, bar: false }; delete obj.bar; co…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部