scdate 0.1.1 → 0.2.1

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.
@@ -1,2 +1,10 @@
1
1
  import { Weekday } from '../constants';
2
2
  export declare const DayToWeekday: Weekday[];
3
+ export declare const DaysInWeek = 7;
4
+ export declare const MinutesInDay = 1440;
5
+ export declare const MinutesInHour = 60;
6
+ export declare const SecondsInHour = 3600;
7
+ export declare const SecondsInMinute = 60;
8
+ export declare const MillisecondsInDay = 86400000;
9
+ export declare const MillisecondsInMinute = 60000;
10
+ export declare const MillisecondsInSecond = 1000;
@@ -8,3 +8,11 @@ export const DayToWeekday = [
8
8
  Weekday.Fri,
9
9
  Weekday.Sat,
10
10
  ];
11
+ export const DaysInWeek = 7;
12
+ export const MinutesInDay = 1440;
13
+ export const MinutesInHour = 60;
14
+ export const SecondsInHour = 3600;
15
+ export const SecondsInMinute = 60;
16
+ export const MillisecondsInDay = 86400000;
17
+ export const MillisecondsInMinute = 60000;
18
+ export const MillisecondsInSecond = 1000;
@@ -1,5 +1,4 @@
1
1
  import { UTCDateMini } from '@date-fns/utc';
2
- import { formatISO } from 'date-fns';
3
2
  export const getISOYearFromISODate = (isoDate) => {
4
3
  const EndOfYearIndex = 4;
5
4
  return isoDate.slice(0, EndOfYearIndex);
@@ -14,8 +13,7 @@ export const getISODateFromISODate = (isoDate) => {
14
13
  return isoDate.slice(StartOfDateIndex);
15
14
  };
16
15
  export const getISODateFromZonedDate = (date) => {
17
- const EndOfISODateIndex = 10;
18
- return formatISO(date).slice(0, EndOfISODateIndex);
16
+ return `${date.getFullYear().toString()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
19
17
  };
20
18
  export const validateISODate = (isoDate) => {
21
19
  const ValidISODate = /^\d{4}-\d{2}-\d{2}$/;
@@ -1,4 +1,3 @@
1
- import { formatISO } from 'date-fns';
2
1
  export const getISOHoursFromISOTime = (isoTime) => {
3
2
  const EndOfHoursIndex = 2;
4
3
  return isoTime.slice(0, EndOfHoursIndex);
@@ -8,9 +7,7 @@ export const getISOMinutesFromISOTime = (isoTime) => {
8
7
  return isoTime.slice(StartOfMinutesIndex);
9
8
  };
10
9
  export const getISOTimeFromDate = (date) => {
11
- const StartOfISOTimeIndex = 11;
12
- const EndOfISOTimeIndex = 16;
13
- return formatISO(date).slice(StartOfISOTimeIndex, EndOfISOTimeIndex);
10
+ return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
14
11
  };
15
12
  export const validateISOTime = (isoTime) => {
16
13
  const ValidISOTime = /^\d{2}:\d{2}$/;
@@ -1,7 +1,6 @@
1
1
  import { UTCDateMini } from '@date-fns/utc';
2
- import { formatISO } from 'date-fns';
3
- import { validateISODate } from './date';
4
- import { validateISOTime } from './time';
2
+ import { getISODateFromZonedDate, validateISODate } from './date';
3
+ import { getISOTimeFromDate, validateISOTime } from './time';
5
4
  export const getISODateFromISOTimestamp = (isoTimestamp) => {
6
5
  const EndOfDateIndex = 10;
7
6
  return isoTimestamp.slice(0, EndOfDateIndex);
@@ -11,8 +10,7 @@ export const getISOTimeFromISOTimestamp = (isoTimestamp) => {
11
10
  return isoTimestamp.slice(StartOfTimeIndex);
12
11
  };
13
12
  export const getISOTimestampFromZonedDate = (date) => {
14
- const ISOTimestampLength = 16;
15
- return formatISO(date).slice(0, ISOTimestampLength);
13
+ return `${getISODateFromZonedDate(date)}T${getISOTimeFromDate(date)}`;
16
14
  };
17
15
  export const validateISOTimestamp = (isoTimestamp) => {
18
16
  const ValidISOTimestamp = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/;
package/dist/sDate.js CHANGED
@@ -1,7 +1,5 @@
1
- import { differenceInDays, lastDayOfMonth } from 'date-fns';
2
- import { daysInWeek } from 'date-fns/constants';
3
1
  import { SDate } from './internal/SDate';
4
- import { DayToWeekday } from './internal/constants';
2
+ import { DayToWeekday, DaysInWeek, MillisecondsInDay, } from './internal/constants';
5
3
  import { getDateAsUTCDateMini, getISODateFromISODate, getISODateFromZonedDate, getISOMonthFromISODate, getISOYearFromISODate, } from './internal/date';
6
4
  import { getAtIndex } from './internal/utils';
7
5
  import { getIndexForWeekday } from './internal/weekdays';
@@ -22,7 +20,7 @@ export const getNextDateByWeekday = (date, weekday) => {
22
20
  const todaysWeekdayIndex = DayToWeekday.indexOf(getWeekdayFromDate(sDateValue));
23
21
  let adjustment = weekdayIndex - todaysWeekdayIndex;
24
22
  if (adjustment <= 0) {
25
- adjustment += daysInWeek;
23
+ adjustment += DaysInWeek;
26
24
  }
27
25
  return addDaysToDate(sDateValue, adjustment);
28
26
  };
@@ -32,7 +30,7 @@ export const getPreviousDateByWeekday = (date, weekday) => {
32
30
  const todaysWeekdayIndex = DayToWeekday.indexOf(getWeekdayFromDate(sDateValue));
33
31
  let adjustment = weekdayIndex - todaysWeekdayIndex;
34
32
  if (adjustment >= 0) {
35
- adjustment -= daysInWeek;
33
+ adjustment -= DaysInWeek;
36
34
  }
37
35
  return addDaysToDate(sDateValue, adjustment);
38
36
  };
@@ -45,8 +43,9 @@ export const getDateForFirstDayOfMonth = (date) => {
45
43
  export const getDateForLastDayOfMonth = (date) => {
46
44
  const sDateValue = sDate(date);
47
45
  const nativeDate = getDateAsUTCDateMini(sDateValue);
48
- const lastDay = lastDayOfMonth(nativeDate);
49
- return sDate(getISODateFromZonedDate(lastDay));
46
+ nativeDate.setFullYear(nativeDate.getFullYear(), nativeDate.getMonth() + 1, 0);
47
+ nativeDate.setHours(0, 0, 0, 0);
48
+ return sDate(getISODateFromZonedDate(nativeDate));
50
49
  };
51
50
  export const getYearFromDate = (date) => {
52
51
  const sDateValue = sDate(date);
@@ -74,7 +73,9 @@ export const getTimeZonedDateFromDate = (date, timeZone) => {
74
73
  export const getDaysBetweenDates = (date1, date2) => {
75
74
  const sDate1 = sDate(date1);
76
75
  const sDate2 = sDate(date2);
77
- return differenceInDays(getDateAsUTCDateMini(sDate2), getDateAsUTCDateMini(sDate1));
76
+ const ms1 = getDateAsUTCDateMini(sDate1).getTime();
77
+ const ms2 = getDateAsUTCDateMini(sDate2).getTime();
78
+ return Math.round((ms2 - ms1) / MillisecondsInDay);
78
79
  };
79
80
  export const getFullDateString = (date, locale) => {
80
81
  const sDateValue = sDate(date);
package/dist/sTime.d.ts CHANGED
@@ -4,7 +4,7 @@ export declare const getTimeNow: (timeZone: string) => STime;
4
4
  export declare const getTimeAtMidnight: () => STime;
5
5
  export declare const getTimeFromMinutes: (timeInMinutes: number) => STime;
6
6
  export declare const getHoursFromTime: (time: string | STime) => number;
7
- export declare const getHoursStringFromTime: (time: string | STime) => string;
7
+ export declare const get12HoursHoursStringFromTime: (time: string | STime) => string;
8
8
  export declare const getMinutesFromTime: (time: string | STime) => number;
9
9
  export declare const getMinutesStringFromTime: (time: string | STime) => string;
10
10
  export declare const get12HourTimeString: (time: string | STime) => string;
package/dist/sTime.js CHANGED
@@ -1,5 +1,5 @@
1
- import { minutesInDay, minutesInHour } from 'date-fns/constants';
2
1
  import { STime } from './internal/STime';
2
+ import { MinutesInDay, MinutesInHour } from './internal/constants';
3
3
  import { getISOHoursFromISOTime, getISOMinutesFromISOTime, getISOTimeFromDate, } from './internal/time';
4
4
  import { getTimeZonedDate } from './internal/zoned';
5
5
  export const sTime = (time) => {
@@ -21,7 +21,7 @@ export const getHoursFromTime = (time) => {
21
21
  const sTimeValue = sTime(time);
22
22
  return Number(getISOHoursFromISOTime(sTimeValue.time));
23
23
  };
24
- export const getHoursStringFromTime = (time) => {
24
+ export const get12HoursHoursStringFromTime = (time) => {
25
25
  const HoursPMStart = 12;
26
26
  const sTimeValue = sTime(time);
27
27
  const hours = getHoursFromTime(sTimeValue) % HoursPMStart;
@@ -37,25 +37,25 @@ export const getMinutesStringFromTime = (time) => {
37
37
  };
38
38
  export const get12HourTimeString = (time) => {
39
39
  const sTimeValue = sTime(time);
40
- return `${getHoursStringFromTime(sTimeValue)}:${getMinutesStringFromTime(sTimeValue)} ${isTimePM(sTimeValue) ? 'PM' : 'AM'}`;
40
+ return `${get12HoursHoursStringFromTime(sTimeValue)}:${getMinutesStringFromTime(sTimeValue)} ${isTimePM(sTimeValue) ? 'PM' : 'AM'}`;
41
41
  };
42
42
  export const getTimeInMinutes = (time, midnightIs24 = false) => {
43
43
  const sTimeValue = sTime(time);
44
- const timeInMinutesMidnight0 = getHoursFromTime(sTimeValue) * minutesInHour +
44
+ const timeInMinutesMidnight0 = getHoursFromTime(sTimeValue) * MinutesInHour +
45
45
  getMinutesFromTime(sTimeValue);
46
46
  if (midnightIs24 && timeInMinutesMidnight0 === 0) {
47
- return minutesInDay;
47
+ return MinutesInDay;
48
48
  }
49
49
  return timeInMinutesMidnight0;
50
50
  };
51
51
  export const addMinutesToTime = (time, minutes) => {
52
52
  const sTimeValue = sTime(time);
53
- let totalMinutes = (getTimeInMinutes(sTimeValue) + minutes) % minutesInDay;
53
+ let totalMinutes = (getTimeInMinutes(sTimeValue) + minutes) % MinutesInDay;
54
54
  if (totalMinutes < 0) {
55
- totalMinutes += minutesInDay;
55
+ totalMinutes += MinutesInDay;
56
56
  }
57
- const newHours = Math.floor(totalMinutes / minutesInHour);
58
- const newMinutes = totalMinutes % minutesInHour;
57
+ const newHours = Math.floor(totalMinutes / MinutesInHour);
58
+ const newMinutes = totalMinutes % MinutesInHour;
59
59
  return sTime(`${newHours.toString().padStart(2, '0')}:${newMinutes.toString().padStart(2, '0')}`);
60
60
  };
61
61
  export const isSameTime = (time1, time2) => {
@@ -1,5 +1,5 @@
1
- import { millisecondsInMinute, millisecondsInSecond } from 'date-fns/constants';
2
1
  import { STimestamp } from './internal/STimestamp';
2
+ import { MillisecondsInMinute, MillisecondsInSecond, } from './internal/constants';
3
3
  import { getISODateFromISOTimestamp, getISOTimeFromISOTimestamp, getISOTimestampFromZonedDate, getTimestampAsUTCDateMini, } from './internal/timestamp';
4
4
  import { getMillisecondsInUTCFromTimestamp, getTimeZonedDate, } from './internal/zoned';
5
5
  import { getShortDateString, sDate } from './sDate';
@@ -31,7 +31,7 @@ export const getSecondsToTimestamp = (timestamp, timeZone) => {
31
31
  const sTimestampValue = sTimestamp(timestamp);
32
32
  const millisecondsNow = Date.now();
33
33
  const millisecondsAtTimestamp = getMillisecondsInUTCFromTimestamp(sTimestampValue, timeZone);
34
- return Math.floor((millisecondsAtTimestamp - millisecondsNow) / millisecondsInSecond);
34
+ return Math.floor((millisecondsAtTimestamp - millisecondsNow) / MillisecondsInSecond);
35
35
  };
36
36
  export const getDateFromTimestamp = (timestamp) => {
37
37
  const sTimestampValue = sTimestamp(timestamp);
@@ -61,7 +61,7 @@ export const addDaysToTimestamp = (timestamp, days) => {
61
61
  export const addMinutesToTimestamp = (timestamp, minutes, timeZone) => {
62
62
  const sTimestampValue = sTimestamp(timestamp);
63
63
  const newMillisecondsInUTC = getMillisecondsInUTCFromTimestamp(sTimestampValue, timeZone) +
64
- minutes * millisecondsInMinute;
64
+ minutes * MillisecondsInMinute;
65
65
  const newTimestamp = getTimestampFromUTCMilliseconds(newMillisecondsInUTC, timeZone);
66
66
  return newTimestamp;
67
67
  };
package/dist/sWeekdays.js CHANGED
@@ -1,6 +1,5 @@
1
- import { daysInWeek } from 'date-fns/constants';
2
1
  import { SWeekdays } from './internal/SWeekdays';
3
- import { DayToWeekday } from './internal/constants';
2
+ import { DayToWeekday, DaysInWeek } from './internal/constants';
4
3
  import { getAtIndex, hasFlag } from './internal/utils';
5
4
  import { getIndexForWeekday } from './internal/weekdays';
6
5
  import { addDaysToDate, getDaysBetweenDates, getWeekdayFromDate, isAfterDate, isSameDateOrBefore, sDate, } from './sDate';
@@ -51,7 +50,7 @@ export const filterWeekdaysForDates = (weekdays, fromDate, toDate) => {
51
50
  throw new Error('The from date must be before the to date.');
52
51
  }
53
52
  const diff = getDaysBetweenDates(sFromDate, sToDate);
54
- if (diff >= daysInWeek) {
53
+ if (diff >= DaysInWeek) {
55
54
  return sWeekdaysInstance;
56
55
  }
57
56
  let result = getWeekdaysWithNoneIncluded();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scdate",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dist/index.js"
@@ -19,11 +19,13 @@
19
19
  "build:clean": "yarn build --clean && rimraf dist && rimraf *.tgz",
20
20
  "lint": "eslint .",
21
21
  "test": "vitest run",
22
- "test:utc": "TZ=Etc/Universal vitest run",
22
+ "test:utc": "TZ=Etc/Universal yarn test",
23
23
  "test:watch": "vitest",
24
+ "test:utc:watch": "TZ=Etc/Universal yarn test:watch",
24
25
  "smoke": "yarn build && yarn lint && yarn test:utc",
26
+ "tsdoc": "tsdoc --src=src/sDate.ts,src/sTime.ts,src/sTimestamp.ts,src/constants.ts,src/sWeekdays.ts --repo=https://github.com/ericvera/scdate && prettier --ignore-unknown --write README.md",
25
27
  "-- PRE-COMMIT HOOKS --": "",
26
- "_postinstall": "husky install",
28
+ "postinstall": "husky install",
27
29
  "prepublishOnly": "pinst --disable",
28
30
  "postpublish": "pinst --enable",
29
31
  "prepare": "husky"
@@ -43,9 +45,10 @@
43
45
  "pinst": "^3.0.0",
44
46
  "prettier": "^3.2.5",
45
47
  "rimraf": "^5.0.5",
48
+ "tsdoc-markdown": "^0.6.0",
46
49
  "typescript": "^5.4.5",
47
- "typescript-eslint": "^7.7.1",
48
- "vitest": "^1.5.1"
50
+ "typescript-eslint": "^7.8.0",
51
+ "vitest": "^1.5.2"
49
52
  },
50
53
  "prettier": {
51
54
  "tabWidth": 2,