|
|
@@ -3,9 +3,10 @@
|
|
|
/**
|
|
|
* UTC时间字符串转为北京时间
|
|
|
* @param {*} utcStr 2025-05-15T02:16:27.000+00:00
|
|
|
+ * @param {*} type 是否返回后缀时分秒,默认true返回
|
|
|
* @returns 2025-05-15 10:16:27
|
|
|
*/
|
|
|
-export function convertUTCToBeijing(utcStr) {
|
|
|
+export function convertUTCToBeijing(utcStr, type = true) {
|
|
|
if (utcStr) {
|
|
|
const date = new Date(utcStr);
|
|
|
|
|
|
@@ -20,12 +21,63 @@ export function convertUTCToBeijing(utcStr) {
|
|
|
const mm = pad(date.getMinutes());
|
|
|
const ss = pad(date.getSeconds());
|
|
|
|
|
|
- return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
|
|
|
+ const time = `${y}-${m}-${d} ${hh}:${mm}:${ss}`
|
|
|
+ const dateday = `${y}-${m}-${d}`
|
|
|
+
|
|
|
+ return type ? time : dateday;
|
|
|
+
|
|
|
} else {
|
|
|
return utcStr
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 获取当前时间或今日 0 点时间(本地)
|
|
|
+ * @param {'date' | 'ISO' | 'zone' | 'now' | 'utc'} type 返回格式类型
|
|
|
+ * - date: 今日日期(默认)
|
|
|
+ * - ISO: 今日 0 点 ISO 字符串,含时区偏移(默认)
|
|
|
+ * - zone: 今日 0 点字符串,格式为 "YYYY-MM-DD 00:00:00"
|
|
|
+ * - now: 当前时间字符串 "YYYY-MM-DD HH:mm:ss"
|
|
|
+ * - utc: 当前 UTC ISO 格式(new Date().toISOString())
|
|
|
+ * @returns string
|
|
|
+ */
|
|
|
+export function getTodayRangeLocal(type) {
|
|
|
+ const now = new Date()
|
|
|
+ const start = new Date(now.getFullYear(), now.getMonth(), now.getDate())
|
|
|
+
|
|
|
+ const offset = -start.getTimezoneOffset()
|
|
|
+ const sign = offset >= 0 ? '+' : '-'
|
|
|
+ const pad = (n) => String(Math.floor(Math.abs(n))).padStart(2, '0')
|
|
|
+ const timezone = `${sign}${pad(offset / 60)}:${pad(offset % 60)}`
|
|
|
+
|
|
|
+ const yyyy = start.getFullYear()
|
|
|
+ const mm = String(start.getMonth() + 1).padStart(2, '0')
|
|
|
+ const dd = String(start.getDate()).padStart(2, '0')
|
|
|
+ const hh = String(now.getHours()).padStart(2, '0')
|
|
|
+ const mi = String(now.getMinutes()).padStart(2, '0')
|
|
|
+ const ss = String(now.getSeconds()).padStart(2, '0')
|
|
|
+
|
|
|
+ const date = `${yyyy}-${mm}-${dd}` //当前日期
|
|
|
+ const timeISOZone = `${yyyy}-${mm}-${dd}T00:00:00${timezone}` // 今日 0 点带时区
|
|
|
+ const timeZone = `${yyyy}-${mm}-${dd} 00:00:00` // 今日 0 点普通格式
|
|
|
+ const timeNow = `${yyyy}-${mm}-${dd} ${hh}:${mi}:${ss}` // 当前时间
|
|
|
+ const ISO = now.toISOString() // 当前 UTC 时间
|
|
|
+
|
|
|
+ switch (type) {
|
|
|
+ case 'zone':
|
|
|
+ return timeZone
|
|
|
+ case 'now':
|
|
|
+ return timeNow
|
|
|
+ case 'utc':
|
|
|
+ return ISO
|
|
|
+ case 'ISO':
|
|
|
+ return timeISOZone
|
|
|
+ default:
|
|
|
+ return date
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 转成小写字符
|
|
|
* userStatus 转成 user_status
|
|
|
@@ -65,4 +117,42 @@ export function roundPrice(value, place = 2, type = false) {
|
|
|
const num = Number(value)
|
|
|
if (isNaN(num)) return (0).toFixed(place)
|
|
|
return type ? Number(num.toFixed(place)) : num.toFixed(place)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 获取设置信息
|
|
|
+ * @returns
|
|
|
+ */
|
|
|
+export function getUserEnvInfo() {
|
|
|
+ const ua = navigator.userAgent
|
|
|
+
|
|
|
+ // 操作系统判断
|
|
|
+ let os = 'Unknown'
|
|
|
+ if (/Windows/i.test(ua)) os = 'Windows'
|
|
|
+ else if (/Mac OS/i.test(ua)) os = 'macOS'
|
|
|
+ else if (/Android/i.test(ua)) os = 'Android'
|
|
|
+ else if (/iPhone|iPad|iPod/i.test(ua)) os = 'iOS'
|
|
|
+ else if (/Linux/i.test(ua)) os = 'Linux'
|
|
|
+
|
|
|
+ // 浏览器判断
|
|
|
+ let browser = 'Unknown'
|
|
|
+ if (/Edg\//i.test(ua)) browser = 'Edge'
|
|
|
+ else if (/Chrome/i.test(ua)) browser = 'Chrome'
|
|
|
+ else if (/Safari/i.test(ua) && !/Chrome/i.test(ua)) browser = 'Safari'
|
|
|
+ else if (/Firefox/i.test(ua)) browser = 'Firefox'
|
|
|
+ else if (/MSIE|Trident/i.test(ua)) browser = 'IE'
|
|
|
+
|
|
|
+ // 网络类型(部分浏览器支持)
|
|
|
+ const connection = navigator.connection || navigator.webkitConnection || navigator.mozConnection
|
|
|
+ const networkType = connection?.effectiveType || 'Unknown'
|
|
|
+
|
|
|
+ // 是否移动端
|
|
|
+ const isMobile = /Android|iPhone|iPad|iPod/i.test(ua)
|
|
|
+
|
|
|
+ return {
|
|
|
+ os,
|
|
|
+ browser,
|
|
|
+ networkType,
|
|
|
+ isMobile
|
|
|
+ }
|
|
|
}
|