summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWinnie Hellmann <winnie@gitlab.com>2018-10-19 19:53:41 +0200
committerWinnie Hellmann <winnie@gitlab.com>2018-10-25 18:46:45 +0200
commit50222d4dc679dd3c9c8d8ff92a32f5691e607804 (patch)
tree7e5115f164e4f5e85eb3761f91ff2d02ed3b87b4
parent048ec287618324e295857be8976be418e4f09703 (diff)
downloadgitlab-ce-50222d4dc679dd3c9c8d8ff92a32f5691e607804.tar.gz
Add calculateRemainingMilliseconds() helper function
-rw-r--r--app/assets/javascripts/lib/utils/datetime_utility.js12
-rw-r--r--spec/javascripts/lib/utils/datetime_utility_spec.js18
2 files changed, 30 insertions, 0 deletions
diff --git a/app/assets/javascripts/lib/utils/datetime_utility.js b/app/assets/javascripts/lib/utils/datetime_utility.js
index 1bdf98d0c97..46740308f17 100644
--- a/app/assets/javascripts/lib/utils/datetime_utility.js
+++ b/app/assets/javascripts/lib/utils/datetime_utility.js
@@ -473,3 +473,15 @@ export const stringifyTime = timeObject => {
*/
export const abbreviateTime = timeStr =>
timeStr.split(' ').filter(unitStr => unitStr.charAt(0) !== '0')[0];
+
+/**
+ * Calculates the milliseconds between now and a given date string.
+ * The result cannot become negative.
+ *
+ * @param endDate date string that the time difference is calculated for
+ * @return {number} number of milliseconds remaining until the given date
+ */
+export const calculateRemainingMilliseconds = endDate => {
+ const remainingMilliseconds = new Date(endDate).getTime() - Date.now();
+ return Math.max(remainingMilliseconds, 0);
+};
diff --git a/spec/javascripts/lib/utils/datetime_utility_spec.js b/spec/javascripts/lib/utils/datetime_utility_spec.js
index 2821f4d6793..de6b96aab57 100644
--- a/spec/javascripts/lib/utils/datetime_utility_spec.js
+++ b/spec/javascripts/lib/utils/datetime_utility_spec.js
@@ -352,3 +352,21 @@ describe('prettyTime methods', () => {
});
});
});
+
+describe('calculateRemainingMilliseconds', () => {
+ beforeEach(() => {
+ spyOn(Date, 'now').and.callFake(() => new Date('2063-04-04T00:42:00Z').getTime());
+ });
+
+ it('calculates the remaining time for a given end date', () => {
+ const milliseconds = datetimeUtility.calculateRemainingMilliseconds('2063-04-04T01:44:03Z');
+
+ expect(milliseconds).toBe(3723000);
+ });
+
+ it('returns 0 if the end date has passed', () => {
+ const milliseconds = datetimeUtility.calculateRemainingMilliseconds('2063-04-03T00:00:00Z');
+
+ expect(milliseconds).toBe(0);
+ });
+});