1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- // 时间戳转换为年月日时分秒
- export const timesTampChange = (timestamp, format = 'Y-M-D h:m:s') => {
- if (!timestamp) return ''
- const date = new Date(timestamp)
- const Y = date.getFullYear().toString()
- const M = (date.getMonth() + 1).toString().padStart(2, '0')
- const D = date.getDate().toString().padStart(2, '0')
- const h = date.getHours().toString().padStart(2, '0')
- const m = date.getMinutes().toString().padStart(2, '0')
- const s = date.getSeconds().toString().padStart(2, '0')
- const formatter = { 'Y': Y, 'M': M, 'D': D, 'h': h, 'm': m, 's': s } // 替换format中的占位符
- let formattedDate = format.replace(/Y|M|D|h|m|s/g, matched => formatter[matched]) // 使用正则表达式匹配并替换占位符
-
- if (!formattedDate) formattedDate = Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s
- return formattedDate
- }
- // 根据生日时间戳计算年龄
- export const getAgeByBirthdayTimestamp = (timestamp) => {
- const now = new Date()
- const birthday = new Date(timestamp)
- const age = now.getFullYear() - birthday.getFullYear()
- return age
- }
- // 将YYYY-MM转换为时间戳
- export const convertYearMonthToTimestamp = (yearMonth) => {
- const regex = /^\d{4}-\d{2}$/
- if (!regex.test(yearMonth)) {
- throw new Error("Invalid input format. Expected 'YYYY-MM'.")
- }
- const [year, month] = yearMonth.split('-').map(Number)
- const date = new Date(Date.UTC(year, month - 1, 1))
- const timestamp = date.getTime()
- return timestamp
- }
- export const getTimeDifferenceInChinese = (startTime, endTime) => {
- // 将时间戳转换为 Date 对象(假设时间戳单位为毫秒)
- const startDate = startTime ? new Date(startTime) : new Date();
- const endDate = endTime ? new Date(endTime) : new Date();
- // 计算年份差
- let yearsDiff = endDate.getFullYear() - startDate.getFullYear();
- // 计算月份差(考虑年份差后调整)
- let monthsDiff = endDate.getMonth() - startDate.getMonth();
- // 如果月份差为负,则从上一年借月
- if (monthsDiff < 0) {
- yearsDiff--;
- monthsDiff += 12;
- }
- // 计算日期差(考虑月份差后调整,如果日期差为负,则从上一月借天)
- let daysDiff = endDate.getDate() - startDate.getDate();
- if (daysDiff < 0) {
- monthsDiff--;
- // 获取 startDate 所在月的最后一天
- const lastDayOfMonth = new Date(startDate.getFullYear(), startDate.getMonth() + 1, 0).getDate();
- daysDiff += lastDayOfMonth; // 加上最后一天以补全月份差
- }
- // 构建结果字符串
- let result = "";
- if (yearsDiff > 0) {
- result += `${yearsDiff}年`;
- }
- if (monthsDiff > 0) {
- if (result) {
- // 如果已经有年份差异,则直接添加月份数(不带单位),后面正则替换会处理
- result += monthsDiff;
- } else {
- // 如果没有年份差异,则正常添加月份和单位
- result += `${monthsDiff}个月`;
- // 特别处理只有1个月的情况
- if (monthsDiff === 1) {
- result = "不到1个月"; // 直接替换为“不到1个月”,避免后续复杂的正则替换
- }
- }
- } else if (!result && daysDiff >= 0) {
- // 如果没有年份和月份差异,但天数差异存在(这里其实没处理天数,只是为完整性添加)
- // 理论上应该处理天数,但题目要求只到月份,所以这里直接返回“不到1个月”
- result = "不到1个月";
- }
-
- // 如果之前添加了月份数但没有年份(且不是直接处理的1个月情况),则需要去除末尾多余的数字并添加“个月”
- if (result && !/\d年$/.test(result) && /\d$/.test(result)) {
- result += "个月";
- }
- return result
- }
|