quality_frontend/packages/common/javascript/date.js

194 lines
6.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export const MILLISECOND_PER_SECOND = 1000
export const MILLISECOND_PER_MINUTE = 60 * MILLISECOND_PER_SECOND
export const MILLISECOND_PER_HOUR = 60 * MILLISECOND_PER_MINUTE
export const MILLISECOND_PER_DAY = 24 * MILLISECOND_PER_HOUR
export const MILLISECOND_PER_MONTH = 30 * MILLISECOND_PER_DAY
export const MILLISECOND_PER_YEAR = 365 * MILLISECOND_PER_MONTH
function addZero (t) {
if (t < 10) {
t = '0' + t
}
return t
}
/**
* @description: 输入Date或者时间戳返回0时0分0秒的Date(非UTC)
* @param {Date | milliseconds} 必选
* @return: {Date} 返回0时0分0秒的Date
*/
export function clearTime (date) {
let d = new Date(date)
if (d.toString() === 'Invalid Date') {
return false
} else {
d.setHours(0)
d.setMinutes(0)
d.setSeconds(0)
d.setMilliseconds(0)
return d
}
}
/**
* @description: 输入Date对象或者时间戳返回 YYYY-MM-DD (非UTC)格式的字符串,分隔符默认 - ,可自定义
* @param {Date | milliseconds} 必选
* @param {String} 可选,用于年月日之间的分隔符
* @return: {String} 返回 YYYY-MM-DD 格式的字符串
*/
export function tranTimeMD (time, split = '-') {
let d = new Date(time)
if (d.toString() === 'Invalid Date') {
return false
} else {
let month = d.getMonth() + 1
let date = d.getDate()
month = addZero(month)
date = addZero(date)
let timeYMD = month + split + date
return timeYMD
}
}
/**
* @description: 输入Date对象或者时间戳返回 YYYY-MM-DD (非UTC)格式的字符串,分隔符默认 - ,可自定义
* @param {Date | milliseconds} 必选
* @param {String} 可选,用于年月日之间的分隔符
* @return: {String} 返回 YYYY-MM-DD 格式的字符串
*/
export function tranTimeYMD (time, split = '-') {
let d = new Date(time)
if (d.toString() === 'Invalid Date') {
return false
} else {
let month = d.getMonth() + 1
let date = d.getDate()
month = addZero(month)
date = addZero(date)
let timeYMD = d.getFullYear() + split + month + split + date
return timeYMD
}
}
/**
* @description: 输入Date对象或者时间戳返回 HH:MM:SS (非UTC)格式的字符串,分隔符默认 : ,可自定义
* @param {Date | milliseconds} 必选
* @param {String} 可选,用于时分秒之间的分隔符
* @return: {String} 返回 HH:MM:SS 格式的字符串
*/
export function tranTimeHMS (time, split = ':') {
let d = new Date(time)
if (d.toString() === 'Invalid Date') {
return false
} else {
let hours = addZero(d.getHours())
let minutes = addZero(d.getMinutes())
let seconds = addZero(d.getSeconds())
let timeHMS = hours + split + minutes + split + seconds
return timeHMS
}
}
/**
* @description: 输入Date对象或者时间戳返回 YYYY-MM-DD HH:MM:SS (非UTC)格式的字符串,分隔符可自定义
* @param {Date | milliseconds} 必选
* @param {String} 可选,用于年月日之间的分隔符
* @param {String} 可选,用于时分秒之间的分隔符
* @return: {String} 返回 YYYY-MM-DD HH:MM:SS 格式的字符串
*/
export function tranTimeYMDHMS (time, split, split2, split3 = ' ') {
let d = new Date(time)
if (d.toString() === 'Invalid Date') {
return false
} else {
return tranTimeYMD(time, split) + split3 + tranTimeHMS(time, split2)
}
}
/**
* @description: 传入时间(毫秒),转化为对应的中文
* @param {Number} 必选,输入毫秒
* @return: {String} , 返回对应的中文时间
*/
export function getTimeUnit (timestamps) {
if (typeof timestamps !== 'number' || timestamps <= 0) {
return '0秒'
}
if (timestamps >= MILLISECOND_PER_YEAR) {
return parseInt(timestamps / MILLISECOND_PER_YEAR) + '年'
}
if (timestamps >= MILLISECOND_PER_MONTH) {
return parseInt(timestamps / MILLISECOND_PER_MONTH) + '个月'
}
if (timestamps >= MILLISECOND_PER_DAY) {
return parseInt(timestamps / MILLISECOND_PER_DAY) + '天'
}
if (timestamps >= MILLISECOND_PER_HOUR) {
return parseInt(timestamps / MILLISECOND_PER_HOUR) + '小时'
}
if (timestamps >= MILLISECOND_PER_MINUTE) {
return parseInt(timestamps / MILLISECOND_PER_MINUTE) + '分钟'
}
if (timestamps >= MILLISECOND_PER_SECOND) {
return parseInt(timestamps / MILLISECOND_PER_SECOND) + '秒'
}
}
/**
* @description: 将时间日期转化为时间戳(支持格式 2017-12-12 12:12:12
* @param {Date} 需要转化的时间
* @return: {milliseconds} 返回对应时间的时间戳
*/
export function timeToStamps (time) {
return new Date(time).getTime()
}
function getSeconds (milliseconds) {
let sec = parseInt(milliseconds / MILLISECOND_PER_SECOND)
return sec ? `${sec}` : ''
}
function getMinutes (milliseconds) {
if (milliseconds / MILLISECOND_PER_MINUTE >= 1) {
return `${Math.floor(milliseconds / MILLISECOND_PER_MINUTE)}${getSeconds(milliseconds % MILLISECOND_PER_MINUTE)}`
} else {
return getSeconds(milliseconds)
}
}
function getHours (milliseconds) {
if (milliseconds / MILLISECOND_PER_HOUR >= 1) {
return `${Math.floor(milliseconds / MILLISECOND_PER_HOUR)}小时${getMinutes(milliseconds % MILLISECOND_PER_HOUR)}`
} else {
return getMinutes(milliseconds)
}
}
function getDays (milliseconds) {
if (milliseconds / MILLISECOND_PER_DAY >= 1) {
return `${Math.floor(milliseconds / MILLISECOND_PER_DAY)}${getHours(milliseconds % MILLISECOND_PER_DAY)}`
} else {
return getHours(milliseconds)
}
}
/**
* 将毫秒值转换成x时x分x秒的形式
* @param {Number} timestamps - 时间的毫秒形式
* @return {String} str - 转换后的字符串
*/
export function convertMStoString (timestamps = 0) {
if (typeof timestamps !== 'number' || timestamps <= 0) {
return '0秒'
}
return getDays(Math.floor(timestamps))
}
/**
* 将秒值转换成x时x分x秒的形式
* @param {Number} time - 时间的秒形式
* @return {String} str - 转换后的字符串
*/
export function convertSecToString (time = 0) {
let timestamps = typeof time !== 'number' ? 0 : time * MILLISECOND_PER_SECOND
return convertMStoString(timestamps)
}