uptime-kuma/src/mixins/datetime.js

139 lines
4.2 KiB
JavaScript
Raw Normal View History

2021-08-17 08:41:12 +00:00
import dayjs from "dayjs";
2021-08-17 08:43:59 +00:00
/**
* DateTime Mixin
* Handled timezone and format
*/
2021-08-17 08:41:12 +00:00
export default {
data() {
return {
userTimezone: localStorage.timezone || "auto",
};
2021-08-17 08:41:12 +00:00
},
methods: {
/**
* Convert value to UTC
* @param {string | number | Date | dayjs.Dayjs} value Time
* value to convert
* @returns {dayjs.Dayjs} Converted time
*/
toUTC(value) {
return dayjs.tz(value, this.timezone).utc().format();
},
2022-09-23 18:33:29 +00:00
/**
* Used for <input type="datetime" />
* @param {string | number | Date | dayjs.Dayjs} value Value to
* convert
* @returns {string} Datetime string
2022-09-23 18:33:29 +00:00
*/
toDateTimeInputFormat(value) {
return this.datetimeFormat(value, "YYYY-MM-DDTHH:mm");
},
/**
* Return a given value in the format YYYY-MM-DD HH:mm:ss
* @param {any} value Value to format as date time
* @returns {string} Formatted string
*/
2021-08-17 08:41:12 +00:00
datetime(value) {
return this.datetimeFormat(value, "YYYY-MM-DD HH:mm:ss");
},
/**
* Converts a Unix timestamp to a formatted date and time string.
* @param {number} value - The Unix timestamp to convert.
* @returns {string} The formatted date and time string.
*/
unixToDateTime(value) {
return dayjs.unix(value).tz(this.timezone).format("YYYY-MM-DD HH:mm:ss");
},
/**
* Converts a Unix timestamp to a dayjs object.
* @param {number} value - The Unix timestamp to convert.
* @returns {dayjs.Dayjs} The dayjs object representing the given timestamp.
*/
unixToDayjs(value) {
return dayjs.unix(value).tz(this.timezone);
},
/**
* Converts the given value to a dayjs object.
* @param {string} value - the value to be converted
* @returns {dayjs.Dayjs} a dayjs object in the timezone of this instance
*/
toDayjs(value) {
return dayjs.utc(value).tz(this.timezone);
},
/**
* Get time for maintenance
* @param {string | number | Date | dayjs.Dayjs} value Time to
* format
* @returns {string} Formatted string
*/
datetimeMaintenance(value) {
const inputDate = new Date(value);
const now = new Date(Date.now());
2022-04-30 12:57:08 +00:00
if (inputDate.getFullYear() === now.getUTCFullYear() && inputDate.getMonth() === now.getUTCMonth() && inputDate.getDay() === now.getUTCDay()) {
return this.datetimeFormat(value, "HH:mm");
2022-04-30 12:57:08 +00:00
} else {
return this.datetimeFormat(value, "YYYY-MM-DD HH:mm");
2022-04-30 12:57:08 +00:00
}
},
/**
* Return a given value in the format YYYY-MM-DD
* @param {any} value Value to format as date
* @returns {string} Formatted string
*/
2021-08-17 08:41:12 +00:00
date(value) {
return this.datetimeFormat(value, "YYYY-MM-DD");
},
/**
* Return a given value in the format HH:mm or if second is set
* to true, HH:mm:ss
* @param {any} value Value to format
* @param {boolean} second Should seconds be included?
* @returns {string} Formatted string
*/
2021-08-17 08:41:12 +00:00
time(value, second = true) {
let secondString;
if (second) {
secondString = ":ss";
} else {
secondString = "";
}
return this.datetimeFormat(value, "HH:mm" + secondString);
},
/**
* Return a value in a custom format
* @param {any} value Value to format
* @param {any} format Format to return value in
* @returns {string} Formatted string
*/
2021-08-17 08:41:12 +00:00
datetimeFormat(value, format) {
if (value !== undefined && value !== "") {
return dayjs.utc(value).tz(this.timezone).format(format);
}
return "";
},
2021-08-17 08:41:12 +00:00
},
computed: {
timezone() {
if (this.userTimezone === "auto") {
return dayjs.tz.guess();
2021-08-17 08:41:12 +00:00
}
return this.userTimezone;
2021-08-17 08:41:12 +00:00
},
}
};