@8ms/helpers 1.15.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/date/format.d.ts CHANGED
@@ -1,9 +1,6 @@
1
- import { DateType } from "./date";
2
- import { GetMidnight } from "./getMidnight";
3
- import { GetTimeZoned } from "./getTimeZoned";
4
- type Format = GetTimeZoned & GetMidnight & {
1
+ import { GetDate } from "./getDate";
2
+ type Format = GetDate & {
5
3
  dateFormat?: string;
6
- input: DateType;
7
4
  };
8
5
  /**
9
6
  * Convert a (number | string | Date) into a "yyyy-MM-dd" string or a specified format.
package/date/format.js CHANGED
@@ -12,6 +12,7 @@ const getDate_1 = __importDefault(require("./getDate"));
12
12
  const format = (props) => {
13
13
  const dateInstance = (0, getDate_1.default)({
14
14
  input: props.input,
15
+ isUtc: props.isUtc,
15
16
  setMidnight: props?.setMidnight,
16
17
  setTimeZone: props?.setTimeZone,
17
18
  });
package/date/getDate.d.ts CHANGED
@@ -1,12 +1,14 @@
1
- import { DateType } from './date';
2
- import { GetMidnight } from './getMidnight';
3
- import { GetTimeZoned } from './getTimeZoned';
4
- type GetDate = GetTimeZoned & GetMidnight & {
1
+ import { DateType } from "./date";
2
+ import { GetMidnight } from "./getMidnight";
3
+ import { GetTimeZoned } from "./getTimeZoned";
4
+ export type GetDate = GetTimeZoned & GetMidnight & {
5
5
  input: DateType;
6
+ isUtc?: boolean;
6
7
  };
7
8
  /**
8
9
  * Convert a (number | string | Date) into a Date object.
9
10
  * As the user would be providing the input we don't want to change the timezone typically.
11
+ * By default assumption is that the input is UTC, however it can be switched to timezoned time.
10
12
  */
11
13
  declare const getDate: (props: GetDate) => Date;
12
14
  export default getDate;
package/date/getDate.js CHANGED
@@ -4,26 +4,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const getMidnight_1 = __importDefault(require("./getMidnight"));
7
- const getTimeZoned_1 = __importDefault(require("./getTimeZoned"));
8
- const date_fns_1 = require("date-fns");
9
7
  /**
10
8
  * Convert a (number | string | Date) into a Date object.
11
9
  * As the user would be providing the input we don't want to change the timezone typically.
10
+ * By default assumption is that the input is UTC, however it can be switched to timezoned time.
12
11
  */
13
12
  const getDate = (props) => {
14
13
  let date;
14
+ let isUtc = undefined === props?.isUtc ? true : props.isUtc;
15
15
  // Already date instance - no change
16
16
  if (props.input instanceof Date) {
17
17
  date = new Date(props.input.valueOf());
18
18
  }
19
- else if ('string' === typeof props.input || 'number' === typeof props.input) {
19
+ else if ("string" === typeof props.input || "number" === typeof props.input) {
20
20
  // Convert the input into string
21
21
  const dateString = props.input.toString();
22
22
  const regexes = {
23
- ymdDash: new RegExp('^[0-9]{4}-[0-9]{2}-[0-9]{2}$'),
24
- ymdNumber: new RegExp('^[0-9]{8}$'),
25
- ymdHisDash: new RegExp('^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$'),
26
- ymdHisNumber: new RegExp('^[0-9]{14}$'),
23
+ ymdDash: new RegExp("^[0-9]{4}-[0-9]{2}-[0-9]{2}$"),
24
+ ymdNumber: new RegExp("^[0-9]{8}$"),
25
+ ymdHisDash: new RegExp("^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$"),
26
+ ymdHisNumber: new RegExp("^[0-9]{14}$"),
27
27
  };
28
28
  // console.log('regexes.ymdHisDash.test(dateString) ',regexes.ymdHisDash.test(dateString));
29
29
  // 20220412
@@ -33,14 +33,20 @@ const getDate = (props) => {
33
33
  const day = Number(dateString.substring(6, 8));
34
34
  date = new Date();
35
35
  // Reset the date to the 1st initially at 1am
36
- date.setDate(1);
37
- date.setHours(1, 0, 0, 0);
38
- date.setFullYear(year);
39
- date.setMonth(month);
40
- date.setDate(day);
41
- date.setHours(0, 0, 0, 0);
42
- // Resolve timezone offset
43
- date = (0, date_fns_1.addMinutes)(date, date.getTimezoneOffset() * -1);
36
+ date.setUTCDate(1);
37
+ date.setUTCHours(1, 0, 0, 0);
38
+ if (isUtc) {
39
+ date.setUTCFullYear(year);
40
+ date.setUTCMonth(month);
41
+ date.setUTCDate(day);
42
+ date.setUTCHours(0, 0, 0, 0);
43
+ }
44
+ else {
45
+ date.setFullYear(year);
46
+ date.setMonth(month);
47
+ date.setDate(day);
48
+ date.setHours(0, 0, 0, 0);
49
+ }
44
50
  }
45
51
  // 2022-04-12
46
52
  else if (regexes.ymdDash.test(dateString)) {
@@ -48,21 +54,22 @@ const getDate = (props) => {
48
54
  const month = Number(dateString.substring(5, 7)) - 1;
49
55
  const day = Number(dateString.substring(8, 10));
50
56
  date = new Date();
51
- //console.log('default - date', date);
52
- // Reset the date
53
- date.setFullYear(year);
54
- date.setHours(1, 0, 0, 0);
55
- date.setMonth(0);
56
- date.setDate(1);
57
- //console.log('reset - date', date);
57
+ // Reset the date to the 1st initially at 1am
58
+ date.setUTCDate(1);
59
+ date.setUTCHours(1, 0, 0, 0);
58
60
  // Finalise date
59
- date.setMonth(month);
60
- date.setDate(day);
61
- date.setHours(0, 0, 0, 0);
62
- //console.log('finalise - date', date);
63
- // Resolve timezone offset
64
- date = (0, date_fns_1.addMinutes)(date, date.getTimezoneOffset() * -1);
65
- //console.log('timezone - date', date);
61
+ if (isUtc) {
62
+ date.setUTCFullYear(year);
63
+ date.setUTCMonth(month);
64
+ date.setUTCDate(day);
65
+ date.setUTCHours(0, 0, 0, 0);
66
+ }
67
+ else {
68
+ date.setFullYear(year);
69
+ date.setMonth(month);
70
+ date.setDate(day);
71
+ date.setHours(0, 0, 0, 0);
72
+ }
66
73
  }
67
74
  // 2022-04-12 01:01:01
68
75
  else if (regexes.ymdHisDash.test(dateString)) {
@@ -74,14 +81,21 @@ const getDate = (props) => {
74
81
  const seconds = Number(dateString.substring(17, 19));
75
82
  date = new Date();
76
83
  // Reset the date to the 1st initially at 1am
77
- date.setDate(1);
78
- date.setHours(1, 0, 0, 0);
79
- date.setFullYear(year);
80
- date.setMonth(month);
81
- date.setDate(day);
82
- date.setHours(hours, minutes, seconds);
83
- // Resolve timezone offset
84
- date = (0, date_fns_1.addMinutes)(date, date.getTimezoneOffset() * -1);
84
+ date.setUTCDate(1);
85
+ date.setUTCHours(1, 0, 0, 0);
86
+ // Finalise date
87
+ if (isUtc) {
88
+ date.setUTCFullYear(year);
89
+ date.setUTCMonth(month);
90
+ date.setUTCDate(day);
91
+ date.setUTCHours(hours, minutes, seconds);
92
+ }
93
+ else {
94
+ date.setFullYear(year);
95
+ date.setMonth(month);
96
+ date.setDate(day);
97
+ date.setHours(hours, minutes, seconds);
98
+ }
85
99
  }
86
100
  // 20220412010101
87
101
  else if (regexes.ymdHisNumber.test(dateString)) {
@@ -93,34 +107,32 @@ const getDate = (props) => {
93
107
  const seconds = Number(dateString.substring(12, 14));
94
108
  date = new Date();
95
109
  // Reset the date to the 1st initially at 1am
96
- date.setDate(1);
97
- date.setHours(1, 0, 0, 0);
98
- date.setFullYear(year);
99
- date.setMonth(month);
100
- date.setDate(day);
101
- date.setHours(hours, minutes, seconds);
102
- // Resolve timezone offset
103
- date = (0, date_fns_1.addMinutes)(date, date.getTimezoneOffset() * -1);
110
+ date.setUTCDate(1);
111
+ date.setUTCHours(1, 0, 0, 0);
112
+ // Finalise date
113
+ if (isUtc) {
114
+ date.setUTCFullYear(year);
115
+ date.setUTCMonth(month);
116
+ date.setUTCDate(day);
117
+ date.setUTCHours(hours, minutes, seconds);
118
+ }
119
+ else {
120
+ date.setFullYear(year);
121
+ date.setMonth(month);
122
+ date.setDate(day);
123
+ date.setHours(hours, minutes, seconds);
124
+ }
104
125
  }
105
126
  // Unsure date format, try anything
106
127
  else {
107
128
  date = new Date(dateString);
108
129
  }
109
130
  }
110
- // console.log('date - before midnight', date);
111
- // console.log('date', date.getTimezoneOffset());
112
131
  // Reset to midnight
113
132
  date = (0, getMidnight_1.default)({
114
133
  input: date,
115
134
  setMidnight: props?.setMidnight,
116
135
  });
117
- // console.log('date - after midnight', date);
118
- // console.log(' props?.setTimeZone', props?.setTimeZone);
119
- // Convert to timezone
120
- date = (0, getTimeZoned_1.default)({
121
- input: date,
122
- setTimeZone: props?.setTimeZone,
123
- });
124
136
  return date;
125
137
  };
126
138
  exports.default = getDate;
@@ -1,12 +1,13 @@
1
- import { DateType } from './date';
1
+ import { DateType } from "./date";
2
2
  type GetDatesBetween = {
3
3
  end: DateType;
4
4
  start: DateType;
5
+ isUtc?: boolean;
5
6
  };
6
7
  /**
7
8
  * Similar to date-fns' eachDayOfInterval, however the timezone messes this function up.
8
9
  * https://date-fns.org/v2.28.0/docs/eachDayOfInterval
9
10
  * https://www.gov.uk/when-do-the-clocks-change
10
11
  */
11
- declare const getDatesBetween: ({ end, start }: GetDatesBetween) => Date[];
12
+ declare const getDatesBetween: (props: GetDatesBetween) => Date[];
12
13
  export default getDatesBetween;
@@ -12,23 +12,30 @@ const date_fns_2 = require("date-fns");
12
12
  * https://date-fns.org/v2.28.0/docs/eachDayOfInterval
13
13
  * https://www.gov.uk/when-do-the-clocks-change
14
14
  */
15
- const getDatesBetween = ({ end, start }) => {
15
+ const getDatesBetween = (props) => {
16
16
  let response = [];
17
- let endDate = (0, getDate_1.default)({ input: end });
17
+ let endDate = (0, getDate_1.default)({
18
+ input: props.end,
19
+ isUtc: props.isUtc,
20
+ });
18
21
  // Increase the end date by 2 hours so it can handle the change in hours
19
22
  endDate = (0, date_fns_2.addHours)(endDate, 2);
20
23
  // Use a string to ensure there's no changes with the timezone
21
- let startString = (0, format_1.default)({ input: start });
24
+ let startString = (0, format_1.default)({
25
+ input: props.start,
26
+ isUtc: props.isUtc,
27
+ });
22
28
  // Create a pointer Date instance
23
- let pointer = (0, getDate_1.default)({ input: startString });
29
+ let pointer = (0, getDate_1.default)({
30
+ input: startString,
31
+ isUtc: props.isUtc,
32
+ });
24
33
  // While we before the end
25
34
  while (pointer <= endDate) {
26
35
  // We need to create a new date entry so its always set to 00:00:00
27
36
  const entry = (0, getDate_1.default)({
28
- input: (0, format_1.default)({
29
- input: pointer,
30
- dateFormat: 'yyyy-MM-dd'
31
- }),
37
+ input: pointer,
38
+ isUtc: props.isUtc,
32
39
  setMidnight: true,
33
40
  });
34
41
  // Add this new entry to our response
@@ -5,5 +5,5 @@ type GetFinancialYearType = {
5
5
  /**
6
6
  * Get the current financial year.
7
7
  */
8
- declare const getFinancialYear: ({ year }?: GetFinancialYearType) => FinancialYear;
8
+ declare const getFinancialYear: (props?: GetFinancialYearType) => FinancialYear;
9
9
  export default getFinancialYear;
@@ -12,10 +12,10 @@ const getToday_1 = __importDefault(require("./getToday"));
12
12
  /**
13
13
  * Get the current financial year.
14
14
  */
15
- const getFinancialYear = ({ year } = { year: undefined }) => {
15
+ const getFinancialYear = (props = {}) => {
16
16
  // Either use the current year or a specified year
17
- let financialYear = year;
18
- if (undefined === year) {
17
+ let financialYear = props.year;
18
+ if (undefined === props.year) {
19
19
  // As this isn't provided by the suer, we want to ensure its London timezone
20
20
  const today = (0, getToday_1.default)();
21
21
  // If today is before 1st of April, then use last year
@@ -29,10 +29,16 @@ const getFinancialYear = ({ year } = { year: undefined }) => {
29
29
  }
30
30
  // The year-end needs to be 31st March next year
31
31
  // We are specifying the date, so don't change the timezone
32
- let yearEnd = (0, getDate_1.default)({ input: `${financialYear + 1}-03-31` });
32
+ let yearEnd = (0, getDate_1.default)({
33
+ input: `${financialYear + 1}-03-31`,
34
+ isUtc: true,
35
+ });
33
36
  // The year start needs to be 1st April this year
34
37
  // We are specifying the date, so don't change the timezone
35
- let yearStart = (0, getDate_1.default)({ input: `${financialYear}-04-01` });
38
+ let yearStart = (0, getDate_1.default)({
39
+ input: `${financialYear}-04-01`,
40
+ isUtc: true,
41
+ });
36
42
  // Get the previous Monday if the 1st of April isn't a Monday
37
43
  if (!(0, date_fns_1.isMonday)(yearStart)) {
38
44
  yearStart = (0, date_fns_4.previousMonday)(yearStart);
@@ -1,9 +1,9 @@
1
- import { FinancialYearWeekType } from './financialYearWeek';
1
+ import { FinancialYearWeekType } from "./financialYearWeek";
2
2
  type GetFinancialYearWeeks = {
3
3
  year?: number;
4
4
  };
5
5
  /**
6
6
  * Get the current financial year.
7
7
  */
8
- declare const getFinancialYearWeeks: ({ year }?: GetFinancialYearWeeks) => FinancialYearWeekType[];
8
+ declare const getFinancialYearWeeks: (props?: GetFinancialYearWeeks) => FinancialYearWeekType[];
9
9
  export default getFinancialYearWeeks;
@@ -10,9 +10,13 @@ const getTimeZoned_1 = __importDefault(require("./getTimeZoned"));
10
10
  /**
11
11
  * Get the current financial year.
12
12
  */
13
- const getFinancialYearWeeks = ({ year } = { year: undefined }) => {
14
- const financialYear = (0, getFinancialYear_1.default)({ year });
15
- const weeks = (0, date_fns_2.eachWeekOfInterval)(financialYear, { weekStartsOn: 1 });
13
+ const getFinancialYearWeeks = (props = {}) => {
14
+ const financialYear = (0, getFinancialYear_1.default)({
15
+ year: props.year
16
+ });
17
+ const weeks = (0, date_fns_2.eachWeekOfInterval)(financialYear, {
18
+ weekStartsOn: 1
19
+ });
16
20
  let response = weeks.map((week, index) => {
17
21
  let weekStart = new Date(week.getTime());
18
22
  weekStart = (0, getTimeZoned_1.default)({ input: weekStart });
@@ -22,7 +26,7 @@ const getFinancialYearWeeks = ({ year } = { year: undefined }) => {
22
26
  start: weekStart,
23
27
  end: weekEnd,
24
28
  financialWeek: (index + 1),
25
- financialYear: year,
29
+ financialYear: props.year,
26
30
  };
27
31
  });
28
32
  return response;
@@ -1,6 +1,6 @@
1
- import { GetMidnight } from './getMidnight';
2
- import { GetTimeZoned } from './getTimeZoned';
3
- import { Timeframe } from './timeframe';
1
+ import { GetMidnight } from "./getMidnight";
2
+ import { GetTimeZoned } from "./getTimeZoned";
3
+ import { Timeframe } from "./timeframe";
4
4
  type GetLastWeek = GetTimeZoned & GetMidnight;
5
5
  /**
6
6
  * Return an object of start/end predefined date of Last Week.
@@ -23,8 +23,12 @@ const getLastWeek = ({ setMidnight = true, setTimeZone = getTimeZoned_1.timeZone
23
23
  setTimeZone,
24
24
  });
25
25
  return {
26
- end: (0, getNumber_1.default)({ input: sunday }),
27
- start: (0, getNumber_1.default)({ input: monday }),
26
+ end: (0, getNumber_1.default)({
27
+ input: sunday
28
+ }),
29
+ start: (0, getNumber_1.default)({
30
+ input: monday
31
+ }),
28
32
  };
29
33
  };
30
34
  exports.default = getLastWeek;
package/date/getMax.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { DateType } from './date';
2
- import { GetMidnight } from './getMidnight';
3
- import { GetTimeZoned } from './getTimeZoned';
1
+ import { DateType } from "./date";
2
+ import { GetMidnight } from "./getMidnight";
3
+ import { GetTimeZoned } from "./getTimeZoned";
4
4
  type GetMax = GetTimeZoned & GetMidnight & {
5
5
  input: DateType;
6
+ isUtc: boolean;
6
7
  max: DateType;
7
8
  };
8
9
  /**
package/date/getMax.js CHANGED
@@ -11,10 +11,12 @@ const getDate_1 = __importDefault(require("./getDate"));
11
11
  const getMax = (props) => {
12
12
  const parsedMax = (0, getDate_1.default)({
13
13
  input: props.max,
14
+ isUtc: props.isUtc,
14
15
  setMidnight: props?.setMidnight || true,
15
16
  });
16
17
  const parsedInput = (0, getDate_1.default)({
17
18
  input: props.input,
19
+ isUtc: props.isUtc,
18
20
  setMidnight: props?.setMidnight || true,
19
21
  });
20
22
  return (0, date_fns_1.isAfter)(parsedInput, parsedMax) ? parsedMax : parsedInput;
@@ -6,12 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const getMidnight = (props) => {
7
7
  let dateInstance = props.input;
8
8
  if (true === props?.setMidnight) {
9
- if (0 === dateInstance.getTimezoneOffset()) {
10
- dateInstance.setHours(0, 0, 0, 0);
11
- }
12
- else {
13
- dateInstance.setHours(1, 0, 0, 0);
14
- }
9
+ dateInstance.setUTCHours(0, 0, 0, 0);
15
10
  }
16
11
  return dateInstance;
17
12
  };
package/date/getMin.d.ts CHANGED
@@ -3,6 +3,7 @@ import { GetMidnight } from './getMidnight';
3
3
  import { GetTimeZoned } from './getTimeZoned';
4
4
  type GetMin = GetTimeZoned & GetMidnight & {
5
5
  input: DateType;
6
+ isUtc: boolean;
6
7
  min: DateType;
7
8
  };
8
9
  /**
package/date/getMin.js CHANGED
@@ -11,10 +11,12 @@ const getDate_1 = __importDefault(require("./getDate"));
11
11
  const getMin = (props) => {
12
12
  const parsedMin = (0, getDate_1.default)({
13
13
  input: props.min,
14
+ isUtc: props.isUtc,
14
15
  setMidnight: props?.setMidnight || true,
15
16
  });
16
17
  const parsedInput = (0, getDate_1.default)({
17
18
  input: props.input,
19
+ isUtc: props.isUtc,
18
20
  setMidnight: props?.setMidnight || true,
19
21
  });
20
22
  return (0, date_fns_1.isBefore)(parsedInput, parsedMin) ? parsedMin : parsedInput;
@@ -3,6 +3,7 @@ import { GetMidnight } from './getMidnight';
3
3
  import { GetTimeZoned } from './getTimeZoned';
4
4
  type GetMonday = GetTimeZoned & GetMidnight & {
5
5
  input?: DateType;
6
+ isUtc?: boolean;
6
7
  weeksAgo: number;
7
8
  };
8
9
  /**
@@ -10,5 +11,5 @@ type GetMonday = GetTimeZoned & GetMidnight & {
10
11
  * 0 weeksAgo - Tuesday (10th), return Monday (8th)
11
12
  * 1 weeksAgo - Tuesday (10th), return Monday (1st)
12
13
  */
13
- declare const getMonday: ({ weeksAgo, input, setMidnight, setTimeZone }: GetMonday) => Date;
14
+ declare const getMonday: (props: GetMonday) => Date;
14
15
  export default getMonday;
package/date/getMonday.js CHANGED
@@ -14,13 +14,13 @@ const getToday_1 = __importDefault(require("./getToday"));
14
14
  * 0 weeksAgo - Tuesday (10th), return Monday (8th)
15
15
  * 1 weeksAgo - Tuesday (10th), return Monday (1st)
16
16
  */
17
- const getMonday = ({ weeksAgo, input, setMidnight = true, setTimeZone = false }) => {
17
+ const getMonday = (props) => {
18
18
  let dateInstance;
19
- if (input) {
19
+ if (props?.input) {
20
20
  dateInstance = (0, getDate_1.default)({
21
- input,
21
+ input: props.input,
22
+ isUtc: props.isUtc,
22
23
  setMidnight: false,
23
- setTimeZone
24
24
  });
25
25
  }
26
26
  else {
@@ -37,11 +37,11 @@ const getMonday = ({ weeksAgo, input, setMidnight = true, setTimeZone = false })
37
37
  dateInstance = (0, date_fns_3.subDays)(dateInstance, isoDay - 1);
38
38
  }
39
39
  // Move it back a given number of weeks
40
- dateInstance = (0, date_fns_3.subDays)(dateInstance, 7 * weeksAgo);
40
+ dateInstance = (0, date_fns_3.subDays)(dateInstance, 7 * props.weeksAgo);
41
41
  // console.log('dateInstance', dateInstance);
42
42
  dateInstance = (0, getMidnight_1.default)({
43
43
  input: dateInstance,
44
- setMidnight
44
+ setMidnight: props.setMidnight,
45
45
  });
46
46
  return dateInstance;
47
47
  };
@@ -1,11 +1,7 @@
1
- import { DateType } from './date';
2
- import { GetMidnight } from './getMidnight';
3
- import { GetTimeZoned } from './getTimeZoned';
4
- type GetNumber = GetTimeZoned & GetMidnight & {
5
- input: DateType;
6
- };
1
+ import { GetDate } from "./getDate";
2
+ type GetNumber = GetDate;
7
3
  /**
8
4
  * Convert a (number | string | Date) into a YYYYMMDD number.
9
5
  */
10
- declare const getNumber: ({ input, setMidnight, setTimeZone }: GetNumber) => number;
6
+ declare const getNumber: (props: GetNumber) => number;
11
7
  export default getNumber;
package/date/getNumber.js CHANGED
@@ -8,12 +8,13 @@ const getDate_1 = __importDefault(require("./getDate"));
8
8
  /**
9
9
  * Convert a (number | string | Date) into a YYYYMMDD number.
10
10
  */
11
- const getNumber = ({ input, setMidnight = true, setTimeZone = false }) => {
11
+ const getNumber = (props) => {
12
12
  let date = (0, getDate_1.default)({
13
- input,
14
- setMidnight,
15
- setTimeZone
13
+ input: props.input,
14
+ isUtc: props.isUtc,
15
+ setMidnight: props.setMidnight,
16
+ setTimeZone: props.setTimeZone,
16
17
  });
17
- return Number((0, date_fns_1.format)(date, 'yyyyMMdd'));
18
+ return Number((0, date_fns_1.format)(date, "yyyyMMdd"));
18
19
  };
19
20
  exports.default = getNumber;
@@ -1,8 +1,9 @@
1
- import { DateType } from './date';
2
- import { GetMidnight } from './getMidnight';
3
- import { GetTimeZoned } from './getTimeZoned';
1
+ import { DateType } from "./date";
2
+ import { GetMidnight } from "./getMidnight";
3
+ import { GetTimeZoned } from "./getTimeZoned";
4
4
  type GetSunday = GetTimeZoned & GetMidnight & {
5
5
  input?: DateType;
6
+ isUtc?: boolean;
6
7
  weeksAgo: number;
7
8
  };
8
9
  /**
@@ -10,5 +11,5 @@ type GetSunday = GetTimeZoned & GetMidnight & {
10
11
  * 0 weeksAgo - Tuesday (17th), return Sunday (14th)
11
12
  * 1 weeksAgo - Tuesday (17th), return Monday (7th)
12
13
  */
13
- declare const getSunday: ({ weeksAgo, input, setMidnight, setTimeZone }: GetSunday) => Date;
14
+ declare const getSunday: (props: GetSunday) => Date;
14
15
  export default getSunday;
package/date/getSunday.js CHANGED
@@ -13,14 +13,21 @@ const getToday_1 = __importDefault(require("./getToday"));
13
13
  * 0 weeksAgo - Tuesday (17th), return Sunday (14th)
14
14
  * 1 weeksAgo - Tuesday (17th), return Monday (7th)
15
15
  */
16
- const getSunday = ({ weeksAgo, input, setMidnight = true, setTimeZone = false }) => {
16
+ const getSunday = (props) => {
17
17
  let dateInstance;
18
- if (input) {
19
- dateInstance = (0, getDate_1.default)({ input, setMidnight, setTimeZone });
18
+ if (props?.input) {
19
+ dateInstance = (0, getDate_1.default)({
20
+ input: props.input,
21
+ isUtc: props.isUtc,
22
+ setMidnight: props.setMidnight,
23
+ setTimeZone: props.setTimeZone,
24
+ });
20
25
  }
21
26
  else {
22
27
  // As we are getting today's date we don't want to convert this timezone
23
- dateInstance = (0, getToday_1.default)({ setMidnight });
28
+ dateInstance = (0, getToday_1.default)({
29
+ setTimeZone: props.setTimeZone,
30
+ });
24
31
  }
25
32
  if (!(0, date_fns_2.isSunday)(dateInstance)) {
26
33
  // Get the ISO Day of week (Monday - 1 to Sunday - 7)
@@ -29,7 +36,7 @@ const getSunday = ({ weeksAgo, input, setMidnight = true, setTimeZone = false })
29
36
  dateInstance = (0, date_fns_3.subDays)(dateInstance, isoDay);
30
37
  }
31
38
  // Move it back a given number of weeks
32
- dateInstance = (0, date_fns_3.subDays)(dateInstance, 7 * weeksAgo);
39
+ dateInstance = (0, date_fns_3.subDays)(dateInstance, 7 * props.weeksAgo);
33
40
  return dateInstance;
34
41
  };
35
42
  exports.default = getSunday;
@@ -1,6 +1,6 @@
1
- import { GetMidnight } from './getMidnight';
2
- import { GetTimeZoned } from './getTimeZoned';
3
- import { Timeframe } from './timeframe';
1
+ import { GetMidnight } from "./getMidnight";
2
+ import { GetTimeZoned } from "./getTimeZoned";
3
+ import { Timeframe } from "./timeframe";
4
4
  type GetThisWeek = GetTimeZoned & GetMidnight;
5
5
  /**
6
6
  * Return an object of start/end predefined date of This Week.
@@ -23,8 +23,14 @@ const getThisWeek = ({ setMidnight = true, setTimeZone = getTimeZoned_1.timeZone
23
23
  setTimeZone,
24
24
  });
25
25
  return {
26
- end: (0, getNumber_1.default)({ input: sunday }),
27
- start: (0, getNumber_1.default)({ input: monday }),
26
+ end: (0, getNumber_1.default)({
27
+ input: sunday,
28
+ isUtc: true,
29
+ }),
30
+ start: (0, getNumber_1.default)({
31
+ input: monday,
32
+ isUtc: true,
33
+ }),
28
34
  };
29
35
  };
30
36
  exports.default = getThisWeek;
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.timeZoneLondon = void 0;
4
- const date_fns_tz_1 = require("date-fns-tz");
5
- const date_fns_1 = require("date-fns");
6
4
  exports.timeZoneLondon = 'Europe/London';
7
5
  /**
8
6
  * Convert an input into a given timezone.
@@ -11,28 +9,47 @@ exports.timeZoneLondon = 'Europe/London';
11
9
  */
12
10
  const getTimeZoned = (props) => {
13
11
  let dateInstance = props.input;
14
- if (props?.input && 'string' === typeof props.setTimeZone) {
12
+ /**
13
+
14
+ if (props?.input && 'string' === typeof props.setTimeZone)
15
+ {
15
16
  // Cannot convert YYYY-MM-DD into new Date as Safari doesn't support this
16
- const dateString = (0, date_fns_tz_1.formatInTimeZone)(dateInstance, props?.setTimeZone, 'yyyy-MM-dd HH:mm:ss');
17
+ const dateString = formatInTimeZone(
18
+ dateInstance,
19
+ props?.setTimeZone,
20
+ 'yyyy-MM-dd HH:mm:ss'
21
+ );
22
+
17
23
  const year = Number(dateString.substring(0, 4));
18
24
  const month = Number(dateString.substring(5, 7)) - 1;
19
25
  const day = Number(dateString.substring(8, 10));
26
+
20
27
  const hours = Number(dateString.substring(11, 13));
21
28
  const minutes = Number(dateString.substring(14, 16));
22
29
  const seconds = Number(dateString.substring(17, 19));
30
+
23
31
  dateInstance = new Date();
32
+
24
33
  // Reset the date to the 1st initially at 1am
25
- dateInstance.setDate(1);
26
- dateInstance.setHours(1, 0, 0, 0);
34
+ dateInstance.setUTCDate(1);
35
+ dateInstance.setUTCHours(1, 0, 0, 0);
36
+
27
37
  dateInstance.setFullYear(year);
28
- dateInstance.setMonth(month);
29
- dateInstance.setDate(day);
30
- dateInstance.setHours(hours, minutes, seconds);
38
+ dateInstance.setUTCMonth(month);
39
+ dateInstance.setUTCDate(day);
40
+ dateInstance.setUTCHours(hours, minutes, seconds);
41
+
31
42
  // console.log('dateInstance', dateInstance);
32
43
  // console.log('dateInstance.getTimezoneOffset()', dateInstance.getTimezoneOffset());
44
+
33
45
  // Fixes the timezone offset due to daylight savings
34
- dateInstance = (0, date_fns_1.addMinutes)(dateInstance, dateInstance.getTimezoneOffset() * -1);
46
+ dateInstance = addMinutes(
47
+ dateInstance,
48
+ dateInstance.getTimezoneOffset() * -1
49
+ );
35
50
  }
51
+
52
+ */
36
53
  return dateInstance;
37
54
  };
38
55
  exports.default = getTimeZoned;
@@ -1,9 +1,9 @@
1
- import { GetMidnight } from './getMidnight';
2
- import { GetTimeZoned } from './getTimeZoned';
1
+ import { GetMidnight } from "./getMidnight";
2
+ import { GetTimeZoned } from "./getTimeZoned";
3
3
  type GetToday = GetTimeZoned & GetMidnight;
4
4
  /**
5
5
  * Shortcut to get today's date.
6
6
  * Creating a date from scratch (no user input), thus needs to be London time.
7
7
  */
8
- declare const getToday: ({ setMidnight, setTimeZone }?: GetToday) => Date;
8
+ declare const getToday: (props?: GetToday) => Date;
9
9
  export default getToday;
package/date/getToday.js CHANGED
@@ -1,46 +1,23 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
6
  const getMidnight_1 = __importDefault(require("./getMidnight"));
30
- const getTimeZoned_1 = __importStar(require("./getTimeZoned"));
7
+ const getTimeZoned_1 = __importDefault(require("./getTimeZoned"));
31
8
  /**
32
9
  * Shortcut to get today's date.
33
10
  * Creating a date from scratch (no user input), thus needs to be London time.
34
11
  */
35
- const getToday = ({ setMidnight = true, setTimeZone = getTimeZoned_1.timeZoneLondon } = { setMidnight: true, setTimeZone: getTimeZoned_1.timeZoneLondon }) => {
12
+ const getToday = (props = {}) => {
36
13
  let today = new Date();
37
- today = (0, getTimeZoned_1.default)({
14
+ today = (0, getMidnight_1.default)({
38
15
  input: today,
39
- setTimeZone
16
+ setMidnight: undefined === props?.setMidnight ? true : props?.setMidnight,
40
17
  });
41
- today = (0, getMidnight_1.default)({
18
+ today = (0, getTimeZoned_1.default)({
42
19
  input: today,
43
- setMidnight
20
+ setTimeZone: undefined === props?.setTimeZone ? undefined : props?.setTimeZone,
44
21
  });
45
22
  return today;
46
23
  };
@@ -12,7 +12,8 @@ const getTodayYmd = () => {
12
12
  const today = (0, getToday_1.default)({ setMidnight: false });
13
13
  const todayYmd = (0, format_1.default)({
14
14
  input: today,
15
- dateFormat: 'yyyy-MM-dd',
15
+ isUtc: true,
16
+ dateFormat: "yyyy-MM-dd",
16
17
  setMidnight: false,
17
18
  });
18
19
  return todayYmd;
@@ -12,6 +12,7 @@ const getTodayYmdhis = () => {
12
12
  const today = (0, getToday_1.default)({ setMidnight: false });
13
13
  const todayYmdhis = (0, format_1.default)({
14
14
  input: today,
15
+ isUtc: true,
15
16
  dateFormat: 'yyyy-MM-dd HH:mm:ss',
16
17
  setMidnight: false,
17
18
  });
@@ -1,6 +1,6 @@
1
- import { GetMidnight } from './getMidnight';
2
- import { GetTimeZoned } from './getTimeZoned';
3
- import { Timeframe } from './timeframe';
1
+ import { GetMidnight } from "./getMidnight";
2
+ import { GetTimeZoned } from "./getTimeZoned";
3
+ import { Timeframe } from "./timeframe";
4
4
  type GetTwoWeeksAgo = GetTimeZoned & GetMidnight;
5
5
  /**
6
6
  * Return an object of start/end predefined date of Two Weeks Ago.
@@ -23,8 +23,14 @@ const getTwoWeeksAgo = ({ setMidnight = true, setTimeZone = getTimeZoned_1.timeZ
23
23
  setTimeZone,
24
24
  });
25
25
  return {
26
- end: (0, getNumber_1.default)({ input: sunday }),
27
- start: (0, getNumber_1.default)({ input: monday }),
26
+ end: (0, getNumber_1.default)({
27
+ input: sunday,
28
+ isUtc: true,
29
+ }),
30
+ start: (0, getNumber_1.default)({
31
+ input: monday,
32
+ isUtc: true,
33
+ }),
28
34
  };
29
35
  };
30
36
  exports.default = getTwoWeeksAgo;
@@ -2,11 +2,12 @@ import { DateType } from './date';
2
2
  import { GetTimeZoned } from './getTimeZoned';
3
3
  type GetWeeksAgo = GetTimeZoned & {
4
4
  input: DateType;
5
+ isUtc: boolean;
5
6
  weeksAgo: number;
6
7
  setMidnight?: boolean;
7
8
  };
8
9
  /**
9
10
  * From a given input, move the date back X weeksAgo
10
11
  */
11
- declare const getWeeksAgo: ({ input, weeksAgo, setMidnight, setTimeZone }: GetWeeksAgo) => number;
12
+ declare const getWeeksAgo: ({ input, isUtc, weeksAgo, setMidnight, setTimeZone }: GetWeeksAgo) => number;
12
13
  export default getWeeksAgo;
@@ -9,13 +9,17 @@ const getNumber_1 = __importDefault(require("./getNumber"));
9
9
  /**
10
10
  * From a given input, move the date back X weeksAgo
11
11
  */
12
- const getWeeksAgo = ({ input, weeksAgo = 0, setMidnight = true, setTimeZone = false }) => {
12
+ const getWeeksAgo = ({ input, isUtc, weeksAgo = 0, setMidnight = true, setTimeZone = false }) => {
13
13
  let dateInstance = (0, getDate_1.default)({
14
14
  input,
15
+ isUtc,
15
16
  setMidnight,
16
17
  setTimeZone
17
18
  });
18
19
  dateInstance = (0, date_fns_1.sub)(dateInstance, { weeks: weeksAgo });
19
- return (0, getNumber_1.default)({ input: dateInstance });
20
+ return (0, getNumber_1.default)({
21
+ input: dateInstance,
22
+ isUtc,
23
+ });
20
24
  };
21
25
  exports.default = getWeeksAgo;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@8ms/helpers",
3
3
  "license": "UNLICENSED",
4
- "version": "1.15.0",
4
+ "version": "1.20.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/8millionstories-organisation/8ms-helpers-ts.git"