@tencentcloud/roomkit-web-vue3
Version:
<h1 align="center"> TUIRoomKit</h1> Conference (TUIRoomKit) is a product suitable for multi-person audio and video conversation scenarios such as business meetings, webinars, and online education. By integrating this product, you can add room management,
87 lines (86 loc) • 3.2 kB
JavaScript
import { isWeChat } from "../../utils/environment.mjs";
const formatDateTime = (date) => {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
const hour = String(date.getHours()).padStart(2, "0");
const minute = String(date.getMinutes()).padStart(2, "0");
return `${month}/${day}/${year}, ${hour}:${minute}`;
};
const getDateAndTime = (date, timeZone) => {
let formattedDate;
let currentTimeZone = timeZone;
if (isWeChat) {
formattedDate = formatDateTime(date);
} else {
{
currentTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
}
const formatter = new Intl.DateTimeFormat("en-US", {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
hour12: false,
// Use 24-hour format
currentTimeZone
});
formattedDate = formatter.format(date);
}
const [month, day, year, hour, minute] = formattedDate.split(/[\s,:/]+/).filter((part) => part !== "AM" && part !== "PM");
const roundedMinute = Math.ceil(parseInt(minute) / 15) * 15;
const adjustedHour = roundedMinute === 60 ? parseInt(hour) + 1 : parseInt(hour);
const adjustedMinute = roundedMinute === 60 ? 0 : roundedMinute;
const adjustedDate = new Date(
parseInt(year),
parseInt(month) - 1,
parseInt(day),
adjustedHour,
adjustedMinute
);
if (adjustedDate < date) {
adjustedDate.setMinutes(adjustedDate.getMinutes() + 15);
}
const intHour = parseInt(hour);
const intMinute = parseInt(minute);
return {
date: new Date(parseInt(year), parseInt(month) - 1, parseInt(day)),
laterTime: `${adjustedHour < 10 ? `0${adjustedHour}` : adjustedHour}:${adjustedMinute < 10 ? `0${adjustedMinute}` : adjustedMinute}`,
time: `${intHour < 10 ? `0${intHour}` : intHour}:${intMinute < 10 ? `0${intMinute}` : intMinute}`
};
};
const convertToTimestamp = (date, time, timezone, offset = 1, referenceTimezone) => {
const year = date.getFullYear();
const month = date.getMonth();
const day = date.getDate();
const [hour, minute] = time.split(":").map(Number);
const dateTime = new Date(year, month, day, hour, minute);
const timezoneOffset = offset * getTimezoneOffset(timezone, referenceTimezone) * 60 * 1e3;
return dateTime.getTime() - timezoneOffset;
};
const calculateEndTime = (startTime, duration) => {
const endTime = startTime + duration * 1e3;
return endTime;
};
function getTimezoneOffset(targetTimezone, referenceTimezone = "UTC") {
const now = Date.now();
const referenceDate = referenceTimezone === "UTC" ? new Date(now).toISOString() : new Date(now).toLocaleString("en-US", {
timeZone: referenceTimezone,
hour12: false
});
const targetDate = new Date(now).toLocaleString("en-US", {
timeZone: targetTimezone,
hour12: false
});
const referenceTime = new Date(referenceDate).getTime();
const targetTime = new Date(targetDate).getTime();
const offset = Math.round((targetTime - referenceTime) / (1e3 * 60));
return offset;
}
export {
calculateEndTime,
convertToTimestamp,
getDateAndTime,
getTimezoneOffset
};