Продолжаем обновлять...
Портал методов инкапсуляции:
- Обычно используемая инкапсуляция методов JS в проектах (1) [солянка]
- Обычно используемая инкапсуляция методов JS в проектах (3) [обработка, связанная со строками]
- Обычно используемая инкапсуляция методов JS в проектах (4) [обработка, связанная с массивом]
Метод использования очень прост, просто поместите его в свой файл инструмента utils.js, напрямую экспортируйте const плюс мой метод инкапсуляции и используйте его в других файлах.{方法1,方法2,方法3...}
Вы можете использовать его сразу после цитирования!
001. Преобразование метки времени в формат YMD
let date = Date.parse(new Date()) // 获取当前时间戳(毫秒)
/*
* timestamp 当前时间戳,毫秒
* formats 时间格式,包括:
* 1. Y-m-d
* 2. Y-m-d H:i:s
* 3. Y年m月d日
* 4. Y年m月d日 H时i分s秒
*/
dateFormat = (timestamp, formats) => {
formats = formats || 'Y-m-d';
let zero = v => v < 10 ? `0${v}` : v
let myDate = timestamp ? new Date(timestamp) : new Date();
let year = myDate.getFullYear();
let month = zero(myDate.getMonth() + 1);
let day = zero(myDate.getDate());
let hour = zero(myDate.getHours());
let minute = zero(myDate.getMinutes());
let second = zero(myDate.getSeconds());
return formats.replace(/Y|m|d|H|i|s/ig, matches => {
return ({
Y: year,
m: month,
d: day,
H: hour,
i: minute,
s: second
})[matches];
});
};
console.log(dateFormat(date,'Y-m-d'));
002. Год
let date = Date.parse(new Date()) // 获取当前时间戳(毫秒)
dateY = time =>{
let newDate = new Date(time);
let {y}={y:newDate.getFullYear()};
return `${y}`;
}
console.log(dateY(date));
003. Год и месяц
let date = Date.parse(new Date()) // 获取当前时间戳(毫秒)
dateYM = time => {
let newDate = new Date(time);
let { y, m, d } = { y: newDate.getFullYear(), m: newDate.getMonth() + 1, d: newDate.getDate() };
return `${y}-${m}`;
}
console.log(dateYM(date));
004. Год Месяц День
Вы можете добавить или удалить соответствующее время в соответствии с вашими потребностями
let date = Date.parse(new Date()) // 获取当前时间戳(毫秒)
dateymd = time => {
let newDate = new Date(time);
let { y, m, d } = { y: newDate.getFullYear(), m: newDate.getMonth() + 1, d: newDate.getDate() };
return `${y}-${m}-${d}`;
}
console.log(dateymd2(date));
005. Год, месяц, день, час, минута, секунда
let date = Date.parse(new Date()) // 获取当前时间戳(毫秒)
dateTime = time => {
let newDate = new Date(time);
let { y, M, d, h, m, s } = { y: newDate.getFullYear(), M: newDate.getMonth() + 1, d: newDate.getDate(), h: newDate.getHours(), m: newDate.getMinutes(), s: newDate.getSeconds() };
return `${y}-${M}-${d} ${h}:${m}:${s}`;
}
console.log(dateTime(date));
006. До времени расчета N
time_filter = time => {
time -= 0;
let difTime = new Date().getTime() - time;
let { h, m, s } = { h: parseInt(difTime / (3600 * 1000)), m: parseInt(difTime / (60 * 1000)), s: parseInt(difTime / 1000) };
let msg = "";
if (m < 1) {
msg = `${s}秒前`
} else if (m >= 1 && h < 1) {
msg = `${m}分钟前`;
} else if (h >= 1 && h <= 24) {
msg = `${h}小时前`;
} else if (h > 24) {
h = parseInt(h / 24)
msg = `${h}天前`;
}
return msg;
}
//输入一个时间戳,能计算出来是多长时间之前
console.log(time_filter(1584009520000)); //3分钟前
007. Получить на прошлой неделе на этой неделе время на следующей неделе
getDate = n => {
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
let date = now.getDate();
let day = now.getDay();
if (day !== 0) {
n = n + (day - 1);
} else {
n = n + day;
}
if (day) {
if (month > 1) {
month = month;
} else {
year = year - 1;
month = 12;
}
}
now.setDate(now.getDate() - n);
year = now.getFullYear();
month = now.getMonth() + 1;
date = now.getDate();
let s =
year +
"-" +
(month < 10 ? "0" + month : month) +
"-" +
(date < 10 ? "0" + date : date);
return s;
}
/***参数都是以周一为基准的***/
//上周的开始时间
// console.log(getDate(7));
//上周的结束时间
// console.log(getDate(1));
//本周的开始时间
// console.log(getDate(0));
//本周的结束时间
// console.log(getDate(-6));
//下周的开始时间
// console.log(getDate(-7));
//下周结束时间
// console.log(getDate(-13));
008. Получить текущее время (год месяц день)
getNowDate = () => {
let nowdate = new Date();
let y = nowdate.getFullYear();
let m = nowdate.getMonth() + 1;
let d = nowdate.getDate();
return y + "-" + m + "-" + d;
}
009. Получить текущее время (год, месяц, день, час, минута, секунда)
/**
* @return {String} 返回一个格式为'yyyy-mm-dd HH:mm:ss'的字符串
*/
getDateTime = () => {
let d, s
d = new Date()
let addZero = value => { return value < 10 ? `0${value}` : value }
s = `${d.getFullYear()}-`
s = `${s}${addZero(d.getMonth() + 1)}-`
s += `${addZero(d.getDate())} `
s += `${addZero(d.getHours())}:`
s += `${addZero(d.getMinutes())}:`
s += `${addZero(d.getSeconds())}`
return s
}
console.log(getDateTime());
010. Обратный отсчет (сброс начала и окончания, пользовательское время)
Следующий код написан в теле HTML
<span id="clock">00:01:00:00</span>
<input id="start" type="button" value="开始" onclick="run()">
<input id="end" type="button" value="结束" onclick="stop()">
<input id="reset" type="button" value="重置" onclick="reset()">
<script language="Javascript">
var normalelapse = 100;
var nextelapse = normalelapse;
var counter;
var startTime;
var start = clock.innerText;
var defaultTime = clock.innerText;
var finish = "00:00:00:00";
var timer = null;
// 开始运行
function run() {
start.disabled = true;
end.disabled = false;
reset.disabled = false;
counter = 0;
// 初始化开始时间
startTime = new Date().valueOf();
// nextelapse是定时时间, 初始时为100毫秒
// 注意setInterval函数: 时间逝去nextelapse(毫秒)后, onTimer才开始执行
timer = window.setInterval("onTimer()", nextelapse);
}
// 停止运行
function stop() {
start.disabled = false;
end.disabled = true;
reset.disabled = true;
window.clearTimeout(timer);
}
window.onload = function () {
end.disabled = true;
};
// 重置时间
function reset() {
start.disabled = true;
end.disabled = false;
reset.disabled = false;
window.clearTimeout(timer);
clock.innerText = defaultTime
}
// 倒计时函数
function onTimer() {
if (start == finish) {
window.clearInterval(timer);
alert("时间到了!");
return;
}
var hms = new String(start).split(":");
var ms = new Number(hms[3]);
var s = new Number(hms[2]);
var m = new Number(hms[1]);
var h = new Number(hms[0]);
ms -= 10;
if (ms < 0) {
ms = 90;
s -= 1;
if (s < 0) {
s = 59;
m -= 1;
}
if (m < 0) {
m = 59;
h -= 1;
}
}
var ms = ms < 10 ? ("0" + ms) : ms;
var ss = s < 10 ? ("0" + s) : s;
var sm = m < 10 ? ("0" + m) : m;
var sh = h < 10 ? ("0" + h) : h;
start = sh + ":" + sm + ":" + ss + ":" + ms;
clock.innerText = start;
// 清除上一次的定时器
window.clearInterval(timer);
// 自校验系统时间得到时间差, 并由此得到下次所启动的新定时器的时间nextelapse
counter++;
var counterSecs = counter * 100;
var elapseSecs = new Date().valueOf() - startTime;
var diffSecs = counterSecs - elapseSecs;
nextelapse = normalelapse + diffSecs;
if (nextelapse < 0) nextelapse = 0;
// 启动新的定时器
timer = window.setInterval("onTimer()", nextelapse);
}
</script>
011. Таймер (без начала и конца)
Следующий код написан в теле HTML
<div id="time"></div>
<script type="text/javascript">
var maxtime = 10 * 60; //
function CountDown() {
if (maxtime >= 0) {
minutes = Math.floor(maxtime / 60);
seconds = Math.floor(maxtime % 60);
msg = "还有" + minutes + "分" + seconds + "秒";
document.all["time"].innerHTML = msg;
if (maxtime == 5 * 60) alert("仅剩5分钟");
--maxtime;
} else {
clearInterval(timer);
alert("时间到!");
}
}
timer = setInterval("CountDown()", 1000);
</script>
012. Получить диапазон дат прошлой недели (месяца) и следующей недели (месяца)
При использовании обратите внимание на взаимную ссылку между функциями и проблему этого указания
/*
* @param dateNow :Date类
* @param intervalDays :间隔天数
* @param bolPastTime :Boolean,判断在参数date之前,还是之后,
*/
getDateRange = (dateNow, intervalDays, bolPastTime) => {
let formateDate = time => {
let year = time.getFullYear()
let month = time.getMonth() + 1
let day = time.getDate()
if (month < 10) { month = `0${month}` }
if (day < 10) { day = `0${day}` }
return `${year}-${month}-${day}`
}
let oneDayTime = 24 * 60 * 60 * 1000
let list = []
let lastDay
if (bolPastTime) {
lastDay = new Date(dateNow.getTime() - intervalDays * oneDayTime)
list.push(formateDate(lastDay))
list.push(formateDate(dateNow))
}
if(!bolPastTime) {
lastDay = new Date(dateNow.getTime() + intervalDays * oneDayTime)
list.push(formateDate(dateNow))
list.push(formateDate(lastDay))
}
return list
}
let date = new Date();
let list = getDateRange(date, 6, true)
console.log("获取近一周日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]);
let list = getDateRange(date, 30, true)
console.log("获取近一个月日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]);
let list = getDateRange(date, 0, true)
console.log("获取今天日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]);
let list = getDateRange(date, 1, true)
console.log("获取昨天日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[0]);
let list = getDateRange(date, 6, false)
console.log("获取下一周日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]);
let list = getDateRange(date, 30, false)
console.log("获取下一个月日期范围:\n开始日期:" + list[0] + ";结束日期:" + list[1]);
/*
获取近一周日期范围:
开始日期:2019-12-04;结束日期:2019-12-10
获取近一个月日期范围:
开始日期:2019-11-10;结束日期:2019-12-10
获取今天日期范围:
开始日期:2019-12-10;结束日期:2019-12-10
获取昨天日期范围:
开始日期:2019-12-09;结束日期:2019-12-09
获取下一周日期范围:
开始日期:2019-12-10;结束日期:2019-12-16
获取下一个月日期范围:
开始日期:2019-12-10;结束日期:2020-01-09
*/
013. Замена символов (формат времени)
/*
* str 表示将要替换的字符串
* l 表示你将要替换的字符
* r 表示你想要替换的字符
*/
transFormat = (str, l, r) => {
let reg = new RegExp(l, 'g') // g表示全部替换,默认替换第一个
str = str.replace(reg, r)
return str
}
console.log(transFormat('2019-12-13', '-', '/')); // 2019/12/13
console.log(transFormat('2019-12-13', '-', '')); // 20191213
014. Заполнение времени
Если полученное время является однозначной цифрой, добавьте 0
Appendzero = obj => {
return obj < 10 ? `0${obj}` : obj
}
015. Получить время на полчаса раньше текущего времени
getHalfHour = () => {
let date = new Date(new Date().getTime() - 30 * 60 * 1000);
let hh = date.getHours()
let mm = date.getMinutes()
let ss = date.getSeconds()
return hh + ':' + mm + ':' + ss
}
Возможно, когда мы используем данные о времени, время, которое нам нужно использовать, должно быть двухзначным.На данный момент нам нужно использовать только вышеуказанноезаполнение времениметод, вы можете решить его идеально, следующим образом:
getHalfHour = () => {
let date = new Date(new Date().getTime() - 30 * 60 * 1000);
let hh = Appendzero(date.getHours())
let mm = Appendzero(date.getMinutes())
let ss = Appendzero(date.getSeconds())
return hh + ':' + mm + ':' + ss
}
function Appendzero(obj) {
return obj < 10 ? `0${obj}` : obj
}
Следующие два метода аналогичны! ! !
016. Получить время на 1 час раньше текущего времени
getOneHour = () => {
let date = new Date(new Date().getTime() - 1 * 60 * 60 * 1000);
let hh = date.getHours()
let mm = date.getMinutes()
let ss = date.getSeconds()
return hh + ':' + mm + ':' + ss
}
017. время получения 12 часов до текущего времени
getHalfHour = () => {
let date = new Date(new Date().getTime() - 30 * 60 * 1000);
let hh = date.getHours()
let mm = date.getMinutes()
let ss = date.getSeconds()
return hh + ':' + mm + ':' + ss
}
018. Цифры заполнены нулями
/*
* num为你想要进行填充的数字
* length为你想要的数字长度
*/
//迭代方式实现
padding1=(num, length)=> {
for(let len = (num + "").length; len < length; len = num.length) {
num = "0" + num;
}
return num;
}
//递归方式实现
padding2=(num, length) =>{
if((num + "").length >= length) {
return num;
}
return padding2("0" + num, length)
}
//转为小数
padding3=(num, length)=> {
let decimal = num / Math.pow(10, length);
//toFixed指定保留几位小数
decimal = decimal.toFixed(length) + "";
return decimal.substr(decimal.indexOf(".")+1);
}
//填充截取法
padding4=(num, length)=> {
//这里用slice和substr均可
return (Array(length).join("0") + num).slice(-length);
}
//填充截取法
padding5=(num, length)=> {
let len = (num + "").length;
let diff = length+1 - len;
if(diff > 0) {
return Array(diff).join("0") + num;
}
return num;
}
019.UTC преобразование стандартного времени
utcToNorm = utcTime => {
// 转为正常的时间格式 年-月-日 时:分:秒
let T_pos = utcTime.indexOf('T');
let Z_pos = utcTime.indexOf('Z');
let year_month_day = utcTime.substr(0, T_pos);
let hour_minute_second = utcTime.substr(T_pos + 1, Z_pos - T_pos - 1);
let newTime = year_month_day + " " + hour_minute_second;
// 处理成为时间戳
timeStamp = new Date(Date.parse(newTime));
timeStamp = timeStamp.getTime();
timeStamp = timeStamp / 1000;
// 增加8个小时,北京时间比utc时间多八个时区
timeStamp = timeStamp + 8 * 60 * 60;
// 时间戳转为时间
let normTime = new Date(parseInt(timeStamp) * 1000).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
return normTime;
}
// 测试数据
let date = '2019-12-29T03:14:32.860Z'
// let date = JSON.stringify(new Date())
console.log(utcToNorm(date)); // 2019-12-29 11:14:32
020. Подсчитайте количество дней между двумя датами
/**
* strDateStart 开始时间 (String)
* strDateEnd 结束时间 (String)
*/
intervalDate = (strDateStart,strDateEnd) => {
let strSeparator = "-"; //日期分隔符
let oDate1;
let oDate2;
let iDays;
oDate1= strDateStart.split(strSeparator);
oDate2= strDateEnd.split(strSeparator);
let strDateS = new Date(oDate1[0], oDate1[1]-1, oDate1[2]);
let strDateE = new Date(oDate2[0], oDate2[1]-1, oDate2[2]);
iDays = parseInt(Math.abs(strDateS - strDateE ) / 1000 / 60 / 60 /24);//把相差的毫秒数转换为天数
return iDays ;
}
// 测试数据
console.log(intervalDate('2020-1-3','2019-12-28')); // 6
console.log(intervalDate('2020-01-03','2019-12-25')); // 9
021. Подсчитать количество дней между двумя датами (рассчитывается по метке времени)
/**
* startTime 开始时间 (时间戳-毫秒)
* endTime 结束时间 (时间戳-毫秒)
*/
intervalTimeStamp = (startTime,endTime) => {
let stime = new Date(startTime).getTime();
let etime = new Date(endTime).getTime();
let intervalTime = etime - stime;
let intervalDay=Math.floor(intervalTime/(24*3600*1000));
let interval = intervalDay;
return interval;
}
// 测试数据
console.log(intervalTimeStamp(1577808000000,1577980800000)); // 2
022. Стандартное время до отметки времени
let date = new Date('2020-03-12 18:00:00');
// 有三种方式转化
let time1 = date.getTime();
let time2 = date.valueOf();
let time3 = Date.parse(date);
console.log(time1); // 1584007200000
console.log(time2); // 1584007200000
console.log(time3); // 1584007200000
023. Получить определенный день или время до и после определенного дня
/**
* 获取某一天时间,或某一天前后的时间
* @param {Number} AddDayCount 与某一天相比的相差的天数 必填 0 当天
* @param {String} dateStr 某一天时间
* @return {String} 返回一个格式为'yyyy-mm-dd'的字符串
*/
getDateStr = (AddDayCount, dateStr = new Date()) => {
let date = new Date(dateStr)
let addZero = value => { return value < 10 ? `0${value}` : value }
date.setDate(date.getDate() + AddDayCount)
let y = date.getFullYear()
let m = date.getMonth() + 1
let d = date.getDate()
return `${y}-${addZero(m)}-${addZero(d)}`
}
console.log(getDateStr(-5))
024. Получить, сколько дней в определенном месяце в определенном году
/**
* 获取某年某月有多少天
* @param {Number} year 某年
* @param {Number} month 某月
* @return {Number} 返回查询的当月的天数
*/
getDaysInOneMonth = (year, month) => {
month = parseInt(month, 10)
let d = new Date(year, month, 0)
return d.getDate()
}
025. Получить текущее и N месяцев назад время
/**
* n 表示n月之前
*/
getBeforeDate = n => {
let cur = new Date()
let y = cur.getFullYear()
let m = cur.getMonth() + 1
let d = cur.getDate()
let Appendzero = v => v < 10 ? `0${v}` : v
let now = `${Appendzero(y)}-${Appendzero(m)}-${Appendzero(d)}`
if (m <= n) {
m += 12 - n
y--
} else {
m -= n
}
let before = `${Appendzero(y)}-${Appendzero(m)}-${Appendzero(d)}`
return [before, now]
}