diff --git a/lib/datasource/jenkins-plugins/get.ts b/lib/datasource/jenkins-plugins/get.ts
index fcc6e403f67be8aa5336ac67491cc66eace7eaec..3ebe7c804ed5c02bbacbc082ee503fa8457abe10 100644
--- a/lib/datasource/jenkins-plugins/get.ts
+++ b/lib/datasource/jenkins-plugins/get.ts
@@ -1,6 +1,7 @@
 import { logger } from '../../logger';
 import { ExternalHostError } from '../../types/errors/external-host-error';
 import { clone } from '../../util/clone';
+import { getElapsedMinutes } from '../../util/date';
 import { Http } from '../../util/http';
 import type { GetReleasesConfig, Release, ReleaseResult } from '../types';
 import { id } from './common';
@@ -43,10 +44,7 @@ interface JenkinsPluginsVersionsResponse {
 }
 
 function hasCacheExpired(cache: JenkinsCache<JenkinsCacheTypes>): boolean {
-  const minutesElapsed = Math.floor(
-    (new Date().getTime() - cache.lastSync.getTime()) / (60 * 1000)
-  );
-  return minutesElapsed >= cache.cacheTimeMin;
+  return getElapsedMinutes(cache.lastSync) >= cache.cacheTimeMin;
 }
 
 async function updateJenkinsCache(
diff --git a/lib/datasource/rubygems/get-rubygems-org.ts b/lib/datasource/rubygems/get-rubygems-org.ts
index 3e0eac3410fb03c95a048716323ecc7a80d8ace0..3d043e1e34f0f3acaaec5435c7986059c8a83326 100644
--- a/lib/datasource/rubygems/get-rubygems-org.ts
+++ b/lib/datasource/rubygems/get-rubygems-org.ts
@@ -1,5 +1,6 @@
 import { logger } from '../../logger';
 import { ExternalHostError } from '../../types/errors/external-host-error';
+import { getElapsedMinutes } from '../../util/date';
 import { Http } from '../../util/http';
 import type { ReleaseResult } from '../types';
 import { id } from './common';
@@ -88,10 +89,7 @@ async function updateRubyGemsVersions(): Promise<void> {
 }
 
 function isDataStale(): boolean {
-  const minutesElapsed = Math.floor(
-    (new Date().getTime() - lastSync.getTime()) / (60 * 1000)
-  );
-  return minutesElapsed >= 5;
+  return getElapsedMinutes(lastSync) >= 5;
 }
 
 let updateRubyGemsVersionsPromise: Promise<void> | undefined;
diff --git a/lib/util/date.ts b/lib/util/date.ts
new file mode 100644
index 0000000000000000000000000000000000000000..93d4f46f00a4af6b538b043d850491a94577acc3
--- /dev/null
+++ b/lib/util/date.ts
@@ -0,0 +1,12 @@
+const ONE_MINUTE_MS = 60 * 1000;
+const ONE_DAY_MS = 24 * 60 * ONE_MINUTE_MS;
+
+export function getElapsedDays(timestamp: string): number {
+  return Math.floor(
+    (new Date().getTime() - new Date(timestamp).getTime()) / ONE_DAY_MS
+  );
+}
+
+export function getElapsedMinutes(date: Date): number {
+  return Math.floor((new Date().getTime() - date.getTime()) / ONE_MINUTE_MS);
+}
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index 7dc8f17ad8e1dc8c675639c88ab2d8e69a0bd5c9..9a8eadd8747f6d5295af0ab74cf8befdfb71dd98 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -18,6 +18,7 @@ import { getAdditionalFiles } from '../../manager/npm/post-update';
 import { Pr, platform } from '../../platform';
 import { BranchStatus, PrState } from '../../types';
 import { ExternalHostError } from '../../types/errors/external-host-error';
+import { getElapsedDays } from '../../util/date';
 import { emojify } from '../../util/emoji';
 import {
   checkoutBranch,
@@ -213,14 +214,9 @@ export async function processBranch(
       // both a stabilityDays setting and a releaseTimestamp
       config.stabilityStatus = BranchStatus.green;
       // Default to 'success' but set 'pending' if any update is pending
-      const oneDay = 24 * 60 * 60 * 1000;
       for (const upgrade of config.upgrades) {
         if (upgrade.stabilityDays && upgrade.releaseTimestamp) {
-          const daysElapsed = Math.floor(
-            (new Date().getTime() -
-              new Date(upgrade.releaseTimestamp).getTime()) /
-              oneDay
-          );
+          const daysElapsed = getElapsedDays(upgrade.releaseTimestamp);
           if (
             !dependencyDashboardCheck &&
             daysElapsed < upgrade.stabilityDays