JavaScript/PHP实现时间范围剔除算法

JavaScript/PHP实现时间范围剔除算法

本文详细介绍了如何在javascriptphp中实现一个时间范围剔除算法。该算法能够从一个主时间范围集合中,移除被另一个子时间范围集合完全包含的时间段,并根据需要将主时间范围分割成多个新的时间段。通过具体的代码示例和注意事项,帮助开发者理解并应用此逻辑来处理时间序列数据。

引言

在日常的软件开发中,处理时间序列数据是常见的任务,例如日程管理、资源预订、数据分析等。其中一个典型场景是,需要从一组大的时间段中,减去或“剔除”一些小的、已被占用的时间段。这通常意味着如果一个小的“移除”时间段完全落在一个大的“主”时间段之内,那么大的时间段需要被分割成两个或更多不包含移除时间段的新时间段。

本文将以一个具体的示例,详细讲解如何在JavaScript中实现这一时间范围剔除算法。虽然示例代码是JavaScript,但其核心逻辑可以很容易地迁移到PHP或其他支持日期时间操作的编程语言中。

核心算法思想

该算法的核心思想是遍历主时间范围集合(例如xyz),对于每一个主时间范围,检查它是否与待移除的时间范围集合(例如abc)中的任何一个时间范围发生碰撞。如果发生碰撞且待移除时间范围完全包含在主时间范围之内,则将主时间范围分割成两个新的时间段,从而有效地“移除”中间的部分。

具体步骤如下:

立即学习“PHP免费学习笔记(深入)”;

初始化结果集: 创建一个空数组,用于存放处理后的新时间范围。遍历主时间范围: 迭代xyz数组中的每一个时间范围。检查碰撞: 对于每一个xyz时间范围,再嵌套遍历abc数组中的每一个时间范围。将所有时间字符串转换为可比较的时间戳(例如毫秒数),以便进行数值比较。判断abc时间范围是否严格地包含在当前的xyz时间范围之内。这里的“严格包含”指的是abc的开始时间晚于xyz的开始时间,且abc的结束时间早于xyz的结束时间。执行剔除与分割:如果检测到严格包含的碰撞:将xyz时间范围从其开始时间到abc的开始时间作为一个新的时间段加入结果集。将xyz时间范围从abc的结束时间到其自身结束时间作为另一个新的时间段加入结果集。标记当前xyz时间范围已处理,并跳出内层循环,因为我们假设一个xyz时间范围只会被一个abc时间范围分割一次(如果需要处理多个abc范围的分割,算法会更复杂)。如果没有检测到碰撞:将原始的xyz时间范围直接加入结果集。更新主时间范围: 用新生成的结果集替换原始的xyz时间范围集合。

JavaScript实现示例

以下是根据上述算法思想实现的JavaScript代码:

// 待移除的时间范围集合const abc = [   {      "start": "2021-11-25 16:30:00",      "end": "2021-11-25 17:30:00"   }];// 主时间范围集合let xyz = [   {      "start": "2021-11-25 09:00:00",      "end": "2021-11-25 18:00:00"   },   {      "start": "2021-11-26 15:00:00",      "end": "2021-11-26 19:00:00"   }];const newXyz = []; // 用于存放处理后的新时间范围// 遍历主时间范围集合 xyzfor (let i = 0; i < xyz.length; i++) {  const currentXyzRange = xyz[i];  const xyzStartTime = new Date(currentXyzRange.start).getTime();  const xyzEndTime = new Date(currentXyzRange.end).getTime();  let collisionDetected = false;  // 遍历待移除时间范围集合 abc,检查碰撞  for (let j = 0; j  xyzStartTime &&      abcStartTime  xyzStartTime && // 确保 abc 结束时间不是在 xyz 开始时间之前      abcEndTime < xyzEndTime    ) {      // 碰撞检测成功,执行分割操作      // 添加第一个分割段:从 xyz 的开始到 abc 的开始      newXyz.push({"start": currentXyzRange.start, "end": currentAbcRange.start});      // 添加第二个分割段:从 abc 的结束到 xyz 的结束      newXyz.push({"start": currentAbcRange.end, "end": currentXyzRange.end});      collisionDetected = true;      break; // 假设每个 xyz 范围只被一个 abc 范围分割,跳出内层循环    }  }  // 如果当前 xyz 范围没有检测到任何碰撞,则将其原样加入结果集  if (!collisionDetected) {    newXyz.push({"start": currentXyzRange.start, "end": currentXyzRange.end});  }}// 更新 xyz 集合为处理后的新集合xyz = newXyz;console.dir(xyz);

输出结果:

[  { start: '2021-11-25 09:00:00', end: '2021-11-25 16:30:00' },  { start: '2021-11-25 17:30:00', end: '2021-11-25 18:00:00' },  { start: '2021-11-26 15:00:00', end: '2021-11-26 19:00:00' }]

注意事项与优化

严格包含的定义: 上述代码中的碰撞检测条件 abcStartTime > xyzStartTime && abcStartTime xyzStartTime && abcEndTime =和<=。

例如,若要实现xyzStartTime <= abcStartTime && abcEndTime <= xyzEndTime(即abc包含在xyz内,允许触及边界),则需要对代码进行相应修改,并考虑边界重合时可能产生空时间段(如{"start": "…", "end": "…"},其中start和end相同)的处理。

多重碰撞处理: 当前代码假设一个xyz时间范围最多只会被一个abc时间范围分割。如果一个xyz时间范围可能与多个abc时间范围发生碰撞并需要全部剔除,那么break语句需要移除,并且在内层循环中,每次分割后,需要将currentXyzRange更新为剩余未处理的部分,或者采用更复杂的区间树/扫描线算法来处理。

时间格式与时区: new Date()构造函数在解析时间字符串时,其行为可能受浏览器或Node.js环境的时区设置影响。建议在实际应用中使用ISO 8601格式(如YYYY-MM-DDTHH:mm:ssZ)并明确指定时区(通常是UTC),或者使用专业的日期时间库(如moment.js或date-fns)来避免潜在的时区问题。

性能考量: 对于大型数据集,这种嵌套循环的算法复杂度为O(N*M),其中N是xyz的长度,M是abc的长度。如果数据集非常大,性能可能会成为瓶颈。在这种情况下,可以考虑以下优化:

排序: 预先将xyz和abc按开始时间排序。更高级的数据结构/算法: 使用区间树(Interval Tree)或扫描线算法(Sweep Line Algorithm)可以更有效地处理大量重叠区间的问题,将复杂度降低到O(N log N)或O((N+M) log (N+M))。

5

以上就是JavaScript/PHP实现时间范围剔除算法的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/199837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月1日 20:33:30
下一篇 2025年11月1日 20:34:35

相关推荐

  • 一文读懂币圈:从概念到实践

    欢迎来到充满活力的加密货币世界,一个正在重塑金融格局的领域。你是否曾对“币圈”这个词感到好奇,却又不知从何开始了解?是否曾被各种专业术语,如“区块链”、“defi”、“nft”搞得一头雾水?别担心,这篇深度解读将为你拨开迷雾,从最基础的概念入手,逐步带你踏上币圈的实践之路。我们将深入探讨加密货币的本…

    好文分享 2025年12月9日
    000
  • 加密金融新时代:区块链技术赋能未来

    加密金融新时代:区块链技术赋能未来——这个标题本身就充满了吸引力,它预示着一个颠覆传统金融的全新格局。当我们谈论“加密金融”,我们不再仅仅是讨论比特币或以太坊这些耳熟能详的数字货币。它是一个庞大的生态系统,涵盖了去中心化金融(defi)、非同质化代币(nft)、web3应用以及更广泛的基于区块链技术…

    好文分享 2025年12月9日
    000
  • 一文详细了解瑞波币(XRP)价格暴跌后反弹66%,市值重回750亿

    Binance币安 欧易OKX ️ Huobi火币️ 在经历市场大幅下挫后,XRP价格强势反弹,显示出投资者在回调中积极入场抄底,市场情绪回暖,预示未来可能进一步上行。 核心动态概览: XRP自1.58美元的低点强劲回升,涨幅达66%,伴随成交量飙升35%,多头持仓增强,市值增长超过750亿美元。周…

    2025年12月9日 好文分享
    000
  • 币圈生态系统:各方力量如何共建?

    在数字货币的浪潮席卷全球的今天,我们常常听到“币圈”这个词。但它究竟代表着什么?它不仅仅是一个交易数字资产的场所,更是一个由多种力量交织、相互作用而成的复杂“生态系统”。这个生态系统如同一个巨大的有机体,其健康与否,取决于内部各方力量能否有效协作,共同推动其发展。理解币圈生态系统,就像解构一个精密的…

    好文分享 2025年12月9日
    000
  • 走进加密世界:你不可不知的十件事

    加密货币,这个在数字时代迅速崛起的概念,正以惊人的速度改变着全球的金融格局。它不仅仅是一种新型的支付方式,更是一种由区块链技术支撑的全新资产类别,其背后蕴含的潜力与颠覆性不容小觑。对于许多人来说,加密世界充满了神秘与复杂,仿佛一道难以逾越的门槛。然而,正是这种新颖性,使得了解加密货币变得尤为重要。它…

    好文分享 2025年12月9日
    000
  • 数字黄金与智能合约:加密货币双雄

    在数字时代浪潮的拍打下,一种全新的资产形式——加密货币——正以前所未有的速度重塑着全球金融格局。它不仅仅是技术极客手中的玩物,更成为了各国央行、金融机构乃至普通投资者争相研究和布局的焦点。在众多加密货币中,“数字黄金”比特币与承载着无限创新潜力的智能合约平台以太坊,无疑是加密世界的两颗璀璨明星。它们…

    好文分享 2025年12月9日
    000
  • 苹果手机下载币安APP操作方法(附全套注册、充值、购买BTC教程)

    Binance币安 欧易OKX ️ Huobi火币️ 苹果手机下载币安APP是可行的,但因地区政策和应用商店规则限制,无法直接在App Store搜索到。操作核心是通过官网渠道获取安装包,并完成设备信任授权。注册与交易流程清晰,关键在于准确填写信息并遵守安全验证步骤。 下载与安装币安APP 由于币安…

    2025年12月9日
    000
  • 币安研究报告:2025年10月加密货币关键趋势分析

    本博客将深入探讨2025年9月Web3生态的关键进展,全面梳理加密货币、DeFi与NFT市场的动态,并展望10月值得关注的重要事件。 2025年9月加密货币市场表现 在美联储实施近一年来的首次降息背景下,市场风险偏好显著回升,推动加密货币总市值在9月份上涨4.3%。降息降低了持有现金的机会成本,促使…

    2025年12月9日 好文分享
    000
  • 一文搞清楚哪些Meme币拥有最强基本盘

    Binance币安 欧易OKX ️ Huobi火币️ 要判断一个Meme币是否拥有最强基本盘,不能只看价格涨跌或短期热度。真正的“基本盘”指的是那些持有时间长、投入深、社区认同感强的忠实用户群体。他们不因市场波动轻易离场,反而会主动传播、参与生态建设,形成强大的集体信念。通过链上数据和社区行为分析,…

    2025年12月9日
    000
  • 稳定币是什么?有哪些?币圈三大稳定币介绍、原理

    Binance币安 欧易OKX ️ Huobi火币️ 稳定币是一种特殊的数字货币,它的设计目标不是升值,而是保持价值稳定。你可以把它看作是数字世界的“电子现金”或“代金券”,通常锚定美元等法币,1:1有资产支持。这样,它既拥有区块链转账快、成本低的优点,又避免了比特币那种剧烈波动,适合用来交易、支付…

    2025年12月9日
    000
  • Zora ($ZORA)是什么?怎么买?ZORA价格预测2025, 2026–2030

    Binance币安 欧易OKX ️ Huobi火币️ Zora是什么以及为何重要 ‍ Zora (ZORA) 是一个专为创作者、艺术家和文化社区打造的 以太坊二层(L2)区块链和NFT协议 。其使命简单而革命性: 让所有人都能轻松铸造、收集和交易NFT — 无需承担传统平台的高昂gas费用或面对准入…

    2025年12月9日 好文分享
    000
  • 币圈热词速览:掌握加密世界的“黑话”

    在充满活力与变数的加密货币世界,一套独特的行话、俚语乃至“黑话”应运而生,它们构成了币圈文化不可或缺的一部分。对于初入此领域的投资者而言,掌握这些词汇如同拥有了一把解读加密世界深层逻辑的钥匙。它们不仅是沟通的工具,更是理解市场情绪、技术趋势以及社群动态的关键。想象一下,当你的朋友们热烈讨论着“梭 哈…

    好文分享 2025年12月9日
    000
  • Fleek(FLK)币是什么?值得投资吗?Fleek工作原理、代币经济学及未来展望

    fleek 是一个由%ignore_a_1%驱动的社交平台,创作者和粉丝可以通过内置创作者代币和自动奖励来创作、混音和变现内容。该平台由 harrison hines 和 janison sivarajah 于 2019 年创立,总部位于纽约,已从 polychain capital、coinbas…

    2025年12月9日
    000
  • 2025年BTC价格预测:技术分析与基本面解析,迈向20万美元之路

    随着加密货币市场进入新一轮周期,比特币(btc)的价格走势再次成为全球投资者关注的焦点。本文将从技术指标、链上数据、机构持仓等多维度分析btc当前价值逻辑,并结合宏观经济环境预测其2025年突破20万美元的可能性。数据显示,截至2025年10月10日,btc报价121,726.78美元,距离20万目…

    2025年12月9日
    000
  • 交易所大揭秘:币圈交易的核心枢纽

    在数字货币的浩瀚宇宙中,交易所扮演着至关重要的角色,它们不仅仅是买卖加密资产的平台,更是连接着无数投资者、项目方以及整个区块链生态系统的核心枢纽。想象一下,如果没有这些如同繁忙港口一般的交易所,你手头的比特币、以太坊将何去何从?它们将无法便捷地流通、定价,甚至难以被广阔市场所认可。因此,深入了解交易…

    好文分享 2025年12月9日
    000
  • 比特币实用主义:比特币的信息移动价值

    如果你认为科技发展遵循着既定的轨迹,那也情有可原。在过去的几十年里,我们见证了个人电脑、互联网、移动设备的兴​​起,现在又迎来了比特币的出现。 Binance币安 欧易OKX ️ Huobi火币️ 比特币是最好的资产,这一点已经得到公认。这只需要基本的金融知识。如果你能看懂图表,证据就显而易见了。 …

    2025年12月9日 好文分享
    000
  • 比特币(BTC)价格重回关键水平,交易员详细分析15万美元目标仍有望实现

    Binance币安 欧易OKX ️ Huobi火币️ 比特币价格再度站上短期持有者成本线,市场普遍预期牛市行情或将延续。 核心看点: 比特币目前交投于11.4万美元的短期持有者平均成本之上,反映出市场买盘强劲,具备进一步上行潜力。多位分析师预测,本轮上涨目标或突破15万美元大关。 比特币强势反弹至1…

    2025年12月9日 好文分享
    000
  • 2025年币圈深度解析:机遇与挑战并存

    币圈交易平台推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: 2025年,数字货币世界将迎来一个充满变数与机遇的时代。告别了过去几年的波动与沉寂,新的科技浪潮、监管框架以及宏观经济走势正在共同塑造一个前所未有的市场格局。对于那些希望在数字资产领域有所作为的投资者、…

    好文分享 2025年12月9日
    000
  • 币安Binance官网2025最新地址 官方正版网站入口

    binance币安 注册入口: APP下载: 欧易OKX 注册入口: APP下载: 火币: 注册入口: APP下载: 币安Binance官网2025最新地址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来币安Binance官网2025最新地址,感兴趣的网友一起随小编来瞧瞧吧! 平台基础服务…

    2025年12月9日
    000
  • 欧易okx官方网址入口 欧易交易平台官方地址

    欧易okx 注册入口: APP下载: Binance币安 注册入口: APP下载: 火币: 注册入口: APP下载: 欧易OKX官方网址入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来欧易OKX交易平台官方地址,感兴趣的网友一起随小编来瞧瞧吧! 平台基础功能支持 1、提供全天候的数字资…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信