UNPKG

7.33 kBJavaScriptView Raw
1/*
2 * Copyright 2015 Palantir Technologies, Inc. All rights reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16import { Months } from "./months";
17export function isDateValid(date) {
18 return date instanceof Date && !isNaN(date.valueOf());
19}
20export function areEqual(date1, date2) {
21 if (date1 == null && date2 == null) {
22 return true;
23 }
24 else if (date1 == null || date2 == null) {
25 return false;
26 }
27 else {
28 return date1.getTime() === date2.getTime();
29 }
30}
31export function areRangesEqual(dateRange1, dateRange2) {
32 if (dateRange1 == null && dateRange2 == null) {
33 return true;
34 }
35 else if (dateRange1 == null || dateRange2 == null) {
36 return false;
37 }
38 else {
39 var start1 = dateRange1[0], end1 = dateRange1[1];
40 var start2 = dateRange2[0], end2 = dateRange2[1];
41 var areStartsEqual = (start1 == null && start2 == null) || areSameDay(start1, start2);
42 var areEndsEqual = (end1 == null && end2 == null) || areSameDay(end1, end2);
43 return areStartsEqual && areEndsEqual;
44 }
45}
46export function areSameDay(date1, date2) {
47 return areSameMonth(date1, date2) && date1.getDate() === date2.getDate();
48}
49export function areSameMonth(date1, date2) {
50 return (date1 != null &&
51 date2 != null &&
52 date1.getMonth() === date2.getMonth() &&
53 date1.getFullYear() === date2.getFullYear());
54}
55export function areSameTime(date1, date2) {
56 return (date1 != null &&
57 date2 != null &&
58 date1.getHours() === date2.getHours() &&
59 date1.getMinutes() === date2.getMinutes() &&
60 date1.getSeconds() === date2.getSeconds() &&
61 date1.getMilliseconds() === date2.getMilliseconds());
62}
63export function clone(d) {
64 return new Date(d.getTime());
65}
66export function isDayInRange(date, dateRange, exclusive) {
67 if (exclusive === void 0) { exclusive = false; }
68 if (date == null) {
69 return false;
70 }
71 var day = clone(date);
72 var start = clone(dateRange[0]);
73 var end = clone(dateRange[1]);
74 day.setHours(0, 0, 0, 0);
75 start.setHours(0, 0, 0, 0);
76 end.setHours(0, 0, 0, 0);
77 return start <= day && day <= end && (!exclusive || (!areSameDay(start, day) && !areSameDay(day, end)));
78}
79export function isDayRangeInRange(innerRange, outerRange) {
80 return ((innerRange[0] == null || isDayInRange(innerRange[0], outerRange)) &&
81 (innerRange[1] == null || isDayInRange(innerRange[1], outerRange)));
82}
83export function isMonthInRange(date, dateRange) {
84 if (date == null) {
85 return false;
86 }
87 var day = clone(date);
88 var start = clone(dateRange[0]);
89 var end = clone(dateRange[1]);
90 day.setDate(1);
91 start.setDate(1);
92 end.setDate(1);
93 day.setHours(0, 0, 0, 0);
94 start.setHours(0, 0, 0, 0);
95 end.setHours(0, 0, 0, 0);
96 return start <= day && day <= end;
97}
98export var isTimeEqualOrGreaterThan = function (time, timeToCompare) { return time.getTime() >= timeToCompare.getTime(); };
99export var isTimeEqualOrSmallerThan = function (time, timeToCompare) { return time.getTime() <= timeToCompare.getTime(); };
100export function isTimeInRange(date, minDate, maxDate) {
101 var time = getDateOnlyWithTime(date);
102 var minTime = getDateOnlyWithTime(minDate);
103 var maxTime = getDateOnlyWithTime(maxDate);
104 var isTimeGreaterThanMinTime = isTimeEqualOrGreaterThan(time, minTime);
105 var isTimeSmallerThanMaxTime = isTimeEqualOrSmallerThan(time, maxTime);
106 if (isTimeEqualOrSmallerThan(maxTime, minTime)) {
107 return isTimeGreaterThanMinTime || isTimeSmallerThanMaxTime;
108 }
109 return isTimeGreaterThanMinTime && isTimeSmallerThanMaxTime;
110}
111export function getTimeInRange(time, minTime, maxTime) {
112 if (areSameTime(minTime, maxTime)) {
113 return maxTime;
114 }
115 else if (isTimeInRange(time, minTime, maxTime)) {
116 return time;
117 }
118 else if (isTimeSameOrAfter(time, maxTime)) {
119 return maxTime;
120 }
121 return minTime;
122}
123/**
124 * Returns true if the time part of `date` is later than or equal to the time
125 * part of `dateToCompare`. The day, month, and year parts will not be compared.
126 */
127export function isTimeSameOrAfter(date, dateToCompare) {
128 var time = getDateOnlyWithTime(date);
129 var timeToCompare = getDateOnlyWithTime(dateToCompare);
130 return isTimeEqualOrGreaterThan(time, timeToCompare);
131}
132/**
133 * @returns a Date at the exact time-wise midpoint between startDate and endDate
134 */
135export function getDateBetween(dateRange) {
136 var start = dateRange[0].getTime();
137 var end = dateRange[1].getTime();
138 var middle = start + (end - start) * 0.5;
139 return new Date(middle);
140}
141export function getDateTime(date, time) {
142 if (date == null) {
143 return null;
144 }
145 else if (time == null) {
146 // cannot use default argument because `null` is a common value in this package.
147 return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);
148 }
149 else {
150 return new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
151 }
152}
153export function getDateOnlyWithTime(date) {
154 return new Date(0, 0, 0, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
155}
156export function getDatePreviousMonth(date) {
157 if (date.getMonth() === Months.JANUARY) {
158 return new Date(date.getFullYear() - 1, Months.DECEMBER);
159 }
160 else {
161 return new Date(date.getFullYear(), date.getMonth() - 1);
162 }
163}
164export function getDateNextMonth(date) {
165 if (date.getMonth() === Months.DECEMBER) {
166 return new Date(date.getFullYear() + 1, Months.JANUARY);
167 }
168 else {
169 return new Date(date.getFullYear(), date.getMonth() + 1);
170 }
171}
172export function convert24HourMeridiem(hour, toPm) {
173 if (hour < 0 || hour > 23) {
174 throw new Error("hour must be between [0,23] inclusive: got ".concat(hour));
175 }
176 return toPm ? (hour % 12) + 12 : hour % 12;
177}
178export function getIsPmFrom24Hour(hour) {
179 if (hour < 0 || hour > 23) {
180 throw new Error("hour must be between [0,23] inclusive: got ".concat(hour));
181 }
182 return hour >= 12;
183}
184export function get12HourFrom24Hour(hour) {
185 if (hour < 0 || hour > 23) {
186 throw new Error("hour must be between [0,23] inclusive: got ".concat(hour));
187 }
188 var newHour = hour % 12;
189 return newHour === 0 ? 12 : newHour;
190}
191export function get24HourFrom12Hour(hour, isPm) {
192 if (hour < 1 || hour > 12) {
193 throw new Error("hour must be between [1,12] inclusive: got ".concat(hour));
194 }
195 var newHour = hour === 12 ? 0 : hour;
196 return isPm ? newHour + 12 : newHour;
197}
198export function isToday(date) {
199 return areSameDay(date, new Date());
200}
201//# sourceMappingURL=dateUtils.js.map
\No newline at end of file