import moment from 'moment-timezone' import { useUserStore } from '@/stores/modules/user' const userStore = useUserStore() const formatString = computed(() => { return userStore.dateFormat || 'MM/DD/YYYY' }) export const formatTimezone = (time: string, timezone?: string, is12HourClock?: boolean) => { if (!time) return '--' let formattedTime = '' if (time.length > 12) { if (is12HourClock) { // 如果是12小时制,使用12小时制格式化 formattedTime = moment(time).format(`${formatString.value} hh:mm A`) } else { // 如果是24小时制,使用24小时制格式化 formattedTime = moment(time).format(`${formatString.value} HH:mm`) } if (!timezone) { return formattedTime } let utcOffset = '' const timeZoneOffset = moment.tz(time, timezone).format('Z') // 替换 "+07:00" 为 "UTC+07" utcOffset = `(UTC${timeZoneOffset.slice(0, 3)})` return `${formattedTime} ${utcOffset}` } else { formattedTime = moment(time).format(formatString.value) return formattedTime } } /** * 返回传入地区的UTC时区格式化 * @param timezone * @returns */ export const getTimezone = (timezone: string, time?: string): string => { if (!timezone) return '' const computedTime = time ? time : moment(time).format(formatString.value) const offset = moment.tz(computedTime, timezone).format('Z') return `UTC${offset.slice(0, 3)}` } export const formatTimezoneByUTCorGMT = (time: string, timezone: string) => { if (!time) return '--' let formattedTime = '' formattedTime = moment(time).format(`${formatString.value} HH:mm`) let gmtOffset = '' if (timezone != null) { const timeZoneOffset = moment.tz(time, timezone).format('Z') // 替换 "+07:00" 为 "GMT+07" if (timezone.includes('Seoul')) { gmtOffset = `(UTC${timeZoneOffset.slice(0, 3)})` } else { gmtOffset = `(GMT${timeZoneOffset.slice(0, 3)})` } return `${formattedTime} ${gmtOffset}` } } /** * 判断是否是欧洲地区 */ export const isEuropean = () => { const userLanguage = navigator.language || 'en-US' const europeanLocales = ['de', 'fr', 'it', 'es', 'nl', 'pl'] // 例:德语、法语、西班牙语等 return europeanLocales.some((locale) => userLanguage.startsWith(locale)) } /** * 根据传入的地区 格式化数字 * @param number - 需要格式化的数字 * @param digits - 小数位数 */ export const formatNumber = (number: number, digits?: number): string => { if (isNaN(number)) return '0' const userLanguage = userStore.userInfo?.numbers_format === 'European' ? 'de-DE' : 'zh-CN' // 设置数字格式化的选项 const options: Intl.NumberFormatOptions = { style: 'decimal' // minimumFractionDigits: digits // maximumFractionDigits: 3 } digits ?? (options.minimumFractionDigits = digits) // 其他地区使用默认格式 return new Intl.NumberFormat(userLanguage, options).format(number) } /** * 根据用户地区判断日期格式 * @returns {string} - 返回日期格式 */ export const getDateFormat = () => { const userLanguage = navigator.language || 'en-US' // 获取浏览器的语言设置 // 判断用户地区 if (userLanguage === 'en-US') { return 'MM/DD/YYYY' // 美国使用 MM/DD/YYYY 格式 } else if ( userLanguage.startsWith('de') || userLanguage.startsWith('fr') || userLanguage.startsWith('it') || userLanguage.startsWith('es') || userLanguage.startsWith('pl') || userLanguage.startsWith('nl') || userLanguage.startsWith('pt') || userLanguage.startsWith('se') ) { return 'DD/MM/YYYY' // 其他欧洲国家(例:德语、法语、西班牙语等)使用 DD/MM/YYYY 格式 } else if (['zh-CN', 'ja-JP', 'ko-KR'].includes(userLanguage)) { return 'YYYY-MM-DD' // 东亚国家(如简体中文、日语、韩语)使用 YYYY-MM-DD 格式 } else { return 'DD/MM/YYYY' // 其他地区默认 DD/MM/YYYY 格式 } } /** * 返回用户设备是否是Mac系统或者iPhone系统 * @returns {boolean} */ export const isMacOS = () => { const userAgent = navigator.userAgent if (userAgent.includes('iPhone') || userAgent.includes('iPad') || userAgent.includes('Mac')) { return true } else { return false } }