Blame view

天文台pc/tianwentai-ui/node_modules/date-fns/areIntervalsOverlapping.mjs 2.34 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  import { toDate } from "./toDate.mjs";
  
  /**
   * The {@link areIntervalsOverlapping} function options.
   */
  
  /**
   * @name areIntervalsOverlapping
   * @category Interval Helpers
   * @summary Is the given time interval overlapping with another time interval?
   *
   * @description
   * Is the given time interval overlapping with another time interval? Adjacent intervals do not count as overlapping unless `inclusive` is set to `true`.
   *
   * @param intervalLeft - The first interval to compare.
   * @param intervalRight - The second interval to compare.
   * @param options - The object with options
   *
   * @returns Whether the time intervals are overlapping
   *
   * @example
   * // For overlapping time intervals:
   * areIntervalsOverlapping(
   *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
   *   { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }
   * )
   * //=> true
   *
   * @example
   * // For non-overlapping time intervals:
   * areIntervalsOverlapping(
   *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
   *   { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }
   * )
   * //=> false
   *
   * @example
   * // For adjacent time intervals:
   * areIntervalsOverlapping(
   *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
   *   { start: new Date(2014, 0, 20), end: new Date(2014, 0, 30) }
   * )
   * //=> false
   *
   * @example
   * // Using the inclusive option:
   * areIntervalsOverlapping(
   *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
   *   { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) }
   * )
   * //=> false
   *
   * @example
   * areIntervalsOverlapping(
   *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },
   *   { start: new Date(2014, 0, 20), end: new Date(2014, 0, 24) },
   *   { inclusive: true }
   * )
   * //=> true
   */
  export function areIntervalsOverlapping(intervalLeft, intervalRight, options) {
    const [leftStartTime, leftEndTime] = [
      +toDate(intervalLeft.start),
      +toDate(intervalLeft.end),
    ].sort((a, b) => a - b);
    const [rightStartTime, rightEndTime] = [
      +toDate(intervalRight.start),
      +toDate(intervalRight.end),
    ].sort((a, b) => a - b);
  
    if (options?.inclusive)
      return leftStartTime <= rightEndTime && rightStartTime <= leftEndTime;
  
    return leftStartTime < rightEndTime && rightStartTime < leftEndTime;
  }
  
  // Fallback for modularized imports:
  export default areIntervalsOverlapping;