201 lines
4.8 KiB
JavaScript
201 lines
4.8 KiB
JavaScript
/**
|
||
* Created by PanJiaChen on 16/11/18.
|
||
*/
|
||
|
||
/**
|
||
* Parse the time to string
|
||
* @param {(Object|string|number)} time
|
||
* @param {string} cFormat
|
||
* @returns {string | null}
|
||
*/
|
||
export function parseTime(time, cFormat) {
|
||
if (arguments.length === 0 || !time) {
|
||
return null;
|
||
}
|
||
const format = cFormat || "{y}-{m}-{d} {h}:{i}:{s}";
|
||
let date;
|
||
if (typeof time === "object") {
|
||
date = time;
|
||
} else {
|
||
if (typeof time === "string") {
|
||
if (/^[0-9]+$/.test(time)) {
|
||
// support "1548221490638"
|
||
time = parseInt(time);
|
||
} else {
|
||
// support safari
|
||
// https://stackoverflow.com/questions/4310953/invalid-date-in-safari
|
||
time = time.replace(new RegExp(/-/gm), "/");
|
||
}
|
||
}
|
||
|
||
if (typeof time === "number" && time.toString().length === 10) {
|
||
time = time * 1000;
|
||
}
|
||
date = new Date(time);
|
||
}
|
||
const formatObj = {
|
||
y: date.getFullYear(),
|
||
m: date.getMonth() + 1,
|
||
d: date.getDate(),
|
||
h: date.getHours(),
|
||
i: date.getMinutes(),
|
||
s: date.getSeconds(),
|
||
a: date.getDay(),
|
||
};
|
||
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
|
||
const value = formatObj[key];
|
||
// Note: getDay() returns 0 on Sunday
|
||
if (key === "a") {
|
||
return ["日", "一", "二", "三", "四", "五", "六"][value];
|
||
}
|
||
return value.toString().padStart(2, "0");
|
||
});
|
||
return time_str;
|
||
}
|
||
|
||
/**
|
||
* @param {number} time
|
||
* @param {string} option
|
||
* @returns {string}
|
||
*/
|
||
export function formatTime(time, option) {
|
||
if (("" + time).length === 10) {
|
||
time = parseInt(time) * 1000;
|
||
} else {
|
||
time = +time;
|
||
}
|
||
const d = new Date(time);
|
||
const now = Date.now();
|
||
|
||
const diff = (now - d) / 1000;
|
||
|
||
if (diff < 30) {
|
||
return "刚刚";
|
||
} else if (diff < 3600) {
|
||
// less 1 hour
|
||
return Math.ceil(diff / 60) + "分钟前";
|
||
} else if (diff < 3600 * 24) {
|
||
return Math.ceil(diff / 3600) + "小时前";
|
||
} else if (diff < 3600 * 24 * 2) {
|
||
return "1天前";
|
||
}
|
||
if (option) {
|
||
return parseTime(time, option);
|
||
} else {
|
||
return (
|
||
d.getMonth() +
|
||
1 +
|
||
"月" +
|
||
d.getDate() +
|
||
"日" +
|
||
d.getHours() +
|
||
"时" +
|
||
d.getMinutes() +
|
||
"分"
|
||
);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @param {string} url
|
||
* @returns {Object}
|
||
*/
|
||
export function param2Obj(url) {
|
||
const search = decodeURIComponent(url.split("?")[1]).replace(/\+/g, " ");
|
||
if (!search) {
|
||
return {};
|
||
}
|
||
const obj = {};
|
||
const searchArr = search.split("&");
|
||
searchArr.forEach((v) => {
|
||
const index = v.indexOf("=");
|
||
if (index !== -1) {
|
||
const name = v.substring(0, index);
|
||
const val = v.substring(index + 1, v.length);
|
||
obj[name] = val;
|
||
}
|
||
});
|
||
return obj;
|
||
}
|
||
|
||
// 时间戳减去当前时间的天数
|
||
export function parseTian(time) {
|
||
// 假设你的时间戳为1609459200000
|
||
let timestamp = time;
|
||
|
||
// 将时间戳转换为日期对象
|
||
let date = new Date(timestamp);
|
||
|
||
// 获取当前日期
|
||
let now = new Date();
|
||
|
||
// 计算两个日期之间的毫秒数
|
||
let diff = date - now;
|
||
|
||
// 将毫秒数转换为天数
|
||
let days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
||
|
||
return days;
|
||
}
|
||
|
||
export function calc_day(time) {
|
||
let timestamp = time;
|
||
|
||
// 将时间戳转换为日期对象
|
||
let date = new Date(timestamp);
|
||
|
||
// 获取当前日期
|
||
let now = new Date();
|
||
|
||
// 计算两个日期之间的毫秒数
|
||
let diff = now - date;
|
||
// 将时间戳相减获得差值(毫秒数)
|
||
/**
|
||
* @desc 毫秒数除以1000就转为秒数
|
||
* @desc 秒数除以60后取整,就是分钟(因为1分钟等于60秒)
|
||
* @desc 秒数除以3600后取整,就是小时(因为1小时等于3600秒)
|
||
* @desc 小时数除以24后取整,就是相差的天数
|
||
*/
|
||
var day = diff / 1000 / 60 / 60 / 24;
|
||
|
||
return parseInt(day);
|
||
}
|
||
|
||
//2023-09-18 10:33:45 输出:2023-9-18
|
||
export function parseDays(time) {
|
||
const dateTimeStr = time;
|
||
const date = new Date(dateTimeStr);
|
||
const year = date.getFullYear();
|
||
const month = date.getMonth() + 1; // 注意,月份是从0开始的,因此需要加1
|
||
const day = date.getDate();
|
||
const formattedDate = `${year}-${month}-${day}`;
|
||
return formattedDate;
|
||
}
|
||
|
||
export function getTimeDays(time) {
|
||
var timestamp = time;
|
||
var date = new Date(timestamp);
|
||
|
||
var year = date.getFullYear();
|
||
var month = ("0" + (date.getMonth() + 1)).slice(-2); // 注意:JavaScript中月份是从0开始的,所以我们需要+1
|
||
var day = ("0" + date.getDate()).slice(-2);
|
||
var hours = ("0" + date.getHours()).slice(-2);
|
||
var minutes = ("0" + date.getMinutes()).slice(-2);
|
||
var seconds = ("0" + date.getSeconds()).slice(-2);
|
||
return year + '-' + month + '-' + day;
|
||
// console.log(
|
||
// "Date: " +
|
||
// year +
|
||
// "-" +
|
||
// month +
|
||
// "-" +
|
||
// day +
|
||
// " " +
|
||
// hours +
|
||
// ":" +
|
||
// minutes +
|
||
// ":" +
|
||
// seconds
|
||
// );
|
||
}
|