summaryrefslogtreecommitdiff
path: root/datetime/mod.ts
blob: db66af1772cba0c49f963026542bb1fcd33d666e (plain)
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
/**
 * Parse date from string using format string
 *
 * @param {string} dateStr - date string
 * @param {string} format - format string
 * @return {Date} Parsed date
 */
export function parseDate(dateStr: string, format: string): Date {
  let m, d, y: string;

  if (format === "mm-dd-yyyy") {
    const datePattern = /^(\d{2})-(\d{2})-(\d{4})$/;
    [, m, d, y] = datePattern.exec(dateStr);
  } else if (format === "dd-mm-yyyy") {
    const datePattern = /^(\d{2})-(\d{2})-(\d{4})$/;
    [, d, m, y] = datePattern.exec(dateStr);
  } else if (format === "yyyy-mm-dd") {
    const datePattern = /^(\d{4})-(\d{2})-(\d{2})$/;
    [, y, m, d] = datePattern.exec(dateStr);
  }

  return new Date(Number(y), Number(m) - 1, Number(d));
}

/**
 * Parse date & time from string using format string
 *
 * @param {string} dateStr - date & time string
 * @param {string} format - format string
 * @return {Date} Parsed date
 */
export function parseDateTime(datetimeStr: string, format: string): Date {
  let m, d, y, ho, mi: string;

  if (format === "mm-dd-yyyy hh:mm") {
    const datePattern = /^(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2})$/;
    [, m, d, y, ho, mi] = datePattern.exec(datetimeStr);
  } else if (format === "dd-mm-yyyy hh:mm") {
    const datePattern = /^(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2})$/;
    [, d, m, y, ho, mi] = datePattern.exec(datetimeStr);
  } else if (format === "yyyy-mm-dd hh:mm") {
    const datePattern = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})$/;
    [, y, m, d, ho, mi] = datePattern.exec(datetimeStr);
  } else if (format === "hh:mm mm-dd-yyyy") {
    const datePattern = /^(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2})$/;
    [, ho, mi, m, d, y] = datePattern.exec(datetimeStr);
  } else if (format === "hh:mm dd-mm-yyyy") {
    const datePattern = /^(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2})$/;
    [, ho, mi, d, m, y] = datePattern.exec(datetimeStr);
  } else if (format === "hh:mm yyyy-mm-dd") {
    const datePattern = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})$/;
    [, ho, mi, y, m, d] = datePattern.exec(datetimeStr);
  }

  return new Date(Number(y), Number(m) - 1, Number(d), Number(ho), Number(mi));
}

/**
 * Get number of current day in year
 *
 * @return {number} Number of current day in year
 */
export function currentDayOfYear(): number {
  return (
    Math.ceil(new Date().getTime() / 86400000) -
    Math.floor(
      new Date().setFullYear(new Date().getFullYear(), 0, 1) / 86400000
    )
  );
}