@revenuecat/purchases-ui-js
Version:
Web components for Paywalls. Powered by RevenueCat
67 lines (66 loc) • 2.42 kB
JavaScript
/**
* Formats a number with leading zero if it's less than 10
*/
function formatWithZero(value) {
return value < 10 ? `0${value}` : `${value}`;
}
/**
* Formats a number without leading zero
*/
function formatWithoutZero(value) {
return `${value}`;
}
/**
* Calculates countdown values from a target date
* Returns 8 countdown variables for use in Text components:
* - count_days_with_zero / count_days_without_zero
* - count_hours_with_zero / count_hours_without_zero
* - count_minutes_with_zero / count_minutes_without_zero
* - count_seconds_with_zero / count_seconds_without_zero
*/
export function calculateCountdownValues(targetDate) {
const now = new Date();
const target = new Date(targetDate);
const diffInMs = target.getTime() - now.getTime();
// If past target date, return all zeros
if (diffInMs <= 0) {
return {
count_days_with_zero: "00",
count_days_without_zero: "0",
count_hours_with_zero: "00",
count_hours_without_zero: "0",
count_minutes_with_zero: "00",
count_minutes_without_zero: "0",
count_seconds_with_zero: "00",
count_seconds_without_zero: "0",
};
}
// Calculate time units
const totalSeconds = Math.floor(diffInMs / 1000);
const totalMinutes = Math.floor(totalSeconds / 60);
const totalHours = Math.floor(totalMinutes / 60);
const totalDays = Math.floor(totalHours / 24);
// Calculate remaining partial units (hours 0-23, minutes 0-59, seconds 0-59)
const days = totalDays;
const hours = totalHours % 24;
const minutes = totalMinutes % 60;
const seconds = totalSeconds % 60;
return {
count_days_with_zero: formatWithZero(days),
count_days_without_zero: formatWithoutZero(days),
count_hours_with_zero: formatWithZero(hours),
count_hours_without_zero: formatWithoutZero(hours),
count_minutes_with_zero: formatWithZero(minutes),
count_minutes_without_zero: formatWithoutZero(minutes),
count_seconds_with_zero: formatWithZero(seconds),
count_seconds_without_zero: formatWithoutZero(seconds),
};
}
/**
* Checks if a countdown has ended (target date is in the past)
*/
export function hasCountdownEnded(targetDate) {
const now = new Date();
const target = new Date(targetDate);
return target.getTime() <= now.getTime();
}