{"id":18709128,"url":"https://github.com/jojoee/range-overlap","last_synced_at":"2025-04-12T10:35:03.959Z","repository":{"id":91700943,"uuid":"344083384","full_name":"jojoee/range-overlap","owner":"jojoee","description":"Are 2 ranges overlap ?","archived":false,"fork":false,"pushed_at":"2023-06-11T04:02:23.000Z","size":159,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T01:20:22.979Z","etag":null,"topics":["date","intersection","interval","overlap","overlapping","range","utility"],"latest_commit_sha":null,"homepage":"https://jojoee.github.io/range-overlap/example/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jojoee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-03T10:13:16.000Z","updated_at":"2023-08-08T06:14:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"18c0c5b8-f676-4661-8564-767427b6a7eb","html_url":"https://github.com/jojoee/range-overlap","commit_stats":{"total_commits":29,"total_committers":1,"mean_commits":29.0,"dds":0.0,"last_synced_commit":"2a27f12bbc89c89fb3c854229baaadb66b950a52"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jojoee%2Frange-overlap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jojoee%2Frange-overlap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jojoee%2Frange-overlap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jojoee%2Frange-overlap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jojoee","download_url":"https://codeload.github.com/jojoee/range-overlap/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248553842,"owners_count":21123531,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["date","intersection","interval","overlap","overlapping","range","utility"],"created_at":"2024-11-07T12:26:23.865Z","updated_at":"2025-04-12T10:35:03.948Z","avatar_url":"https://github.com/jojoee.png","language":"TypeScript","readme":"# range-overlap\n\n[![Version - npm](https://img.shields.io/npm/v/range-overlap.svg)](https://www.npmjs.com/package/range-overlap)\n[![License - npm](https://img.shields.io/npm/l/range-overlap.svg)](http://opensource.org/licenses/MIT)\n![continuous integration](https://github.com/jojoee/range-overlap/workflows/continuous%20integration/badge.svg?branch=main)\n![runnable](https://github.com/jojoee/range-overlap/workflows/runnable/badge.svg?branch=main)\n![release](https://github.com/jojoee/range-overlap/workflows/release/badge.svg?branch=main)\n[![Codecov](https://img.shields.io/codecov/c/github/jojoee/range-overlap.svg)](https://codecov.io/github/jojoee/range-overlap)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)](https://github.com/semantic-release/semantic-release)\n[![Greenkeeper badge](https://badges.greenkeeper.io/jojoee/range-overlap.svg)](https://greenkeeper.io/)\n[![Mutation testing badge](https://img.shields.io/endpoint?style=flat\u0026url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fjojoee%2Frange-overlap%2Fmain)](https://dashboard.stryker-mutator.io/reports/github.com/jojoee/range-overlap/main)\n\nAre 2 ranges overlap ?, [demo page](https://jojoee.github.io/range-overlap/example/).\n\n[![Demo image](./example/range-overlap-demo.png)](https://jojoee.github.io/range-overlap/example/)\n\n## Installation\n\nInstall with `npm install range-overlap` then\n\n```javascript\n// CommonJS\nconst { isRangeOverlap } = require('range-overlap')\n\n// ES6\nimport { isRangeOverlap } from \"range-overlap\"\n```\n\n## Example usage\n\n```javascript\n// integer and floating numbers as a param\nisRangeOverlap(1, 10, 2, 12) // true\nisRangeOverlap(1, 10, 2, 8) // true\nisRangeOverlap(100, 200, 201, 300) // false\n\n// Date as a param\nisRangeOverlap( // true\n  new Date(1615452500000),\n  new Date(1615452800000),\n  new Date(1615452700000),\n  new Date(1615452900000),\n)\n\n// array of numbers or Date(s) as a param\nisRangeOverlap([1, 10], [2, 12]) // true\nisRangeOverlap( // true\n  [new Date(1615452500000), new Date(1615452800000)],\n  [new Date(1615452700000), new Date(1615452900000)]\n)\n\n// custom type as a param\nisRangeOverlap( // true\n  { start: 1, end: 10 },\n  { start: 2, end: 12 }\n)\n\n// support is-exclusive param\nisRangeOverlap(1, 10, 10, 12, true) // false\nisRangeOverlap( // false\n  new Date(1615452500000),\n  new Date(1615452600000),\n  new Date(1615452600000),\n  new Date(1615452800000),\n  true\n)\nisRangeOverlap([1, 10], [10, 12], true) // false\nisRangeOverlap( // false\n  [new Date(1615452500000), new Date(1615452600000)],\n  [new Date(1615452600000), new Date(1615452800000)],\n  true\n)\nisRangeOverlap({ start: 1, end: 10 }, { start: 10, end: 12 }, true) // false\n```\n\n## Algorithm\n\nThe detailed logic is described [here](https://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap), but in summary is explained below.\n```\n2 cases that will not overlapping\ncase1) |----range1----|  |----range2----|\n       x1             x2 y1             y2\n\ncase2) |----range2----|  |----range1----|\n       y1             y2 x1             x2\n\nso isNotOverlap\n= case1) or case2)\n= x2 \u003c y1 || y2 \u003c x1\n\ndue to isOverlap\n= ~isNotOverlap\n= ~(x2 \u003c y1 || y2 \u003c x1)\n= x2 \u003e= y1 \u0026\u0026 y2 \u003e= x1\n= x1 \u003c= y2 \u0026\u0026 y1 \u003c= x2\n```\n\n## CMD\n\n```bash\nnpm run format \u0026\u0026 npm run lint \u0026\u0026 npm run coverage.check \u0026\u0026 npm run build\nnpx stryker run\nnpm run version\n\nnpm publish --dry-run\nnpm publish\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjojoee%2Frange-overlap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjojoee%2Frange-overlap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjojoee%2Frange-overlap/lists"}