前言

在前端开发工作中,服务端返回的时间数据或者你传递给服务端的时间参数经常会遇到时间格式转换及处理问题。这里分享一些我收集到的一些处理方法,方便日后工作中快速找到。先附上必须了解的知识内置对象传送门https://www.w3school.com.cn/js/js_dates.asp

目录

  • 时间格式化
  • 获取当年的第一天
  • 获取指定年指定月份的第一天
  • 获取指定年指定月份的最后一天
  • 获取当前季度的第一天
  • 获取两个日期的相差天数
  • 获取指定的某一天所在的星期范围
  • 获取指定的某一天还差几天过年
  • 获取指定的某一天是星期几
  • 比较传入的两个日期中第一个日期是否比另外一个日期早
  • 计算某一时间偏移后的日期

正文

时间格式化

      

 1 Date.prototype.formatDate=function(format){
2 var o = {
3 "M+": this.getMonth()+1 , //月份
4 "d+": this.getDate(), //日
5 "h+": this.getHours(), //小时
6 "m+": this.getMinutes(), //分
7 "s+": this.getSeconds(), //秒
8 "q+": Math.floor((this.getMonth() + 3) / 3), // 季度
9 "S": this.getMilliseconds() // 毫秒
10 };
11 // 根据y的长度来截取年
12 if (/(y+)/.test(format)){
13 //console.log(RegExp.$1);yyyy
14 format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
15 }
16
17 // console.log(format);1999-MM-DD
18 for (var k in o){
19 if (new RegExp("(" + k + ")").test(format))
20 format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
21 }
22 return format;
23 }
24 // 用法:
25 var time1 = new Date(99,3,2).formatDate("yyyy-MM-dd");
26 var time2 = new Date().formatDate("yyyy-MM-dd hh:mm:ss");
27 console.log(time1);//1999-04-02
28 console.log(time2);//2020-11-15 21:21:55

获取当年的第一天

 function getFirstDayOfYear () {
var date = new Date();
date.setDate(1);
date.setMonth(0);
return date.formatDate('yyyy-MM-dd');;
}
console.log(getFirstDayOfYear())//2020-1-1

获取指定年指定月份的第一天

function getCurrentMonthFirstDay(currentMonth) {
var endDate=new Date(currentMonth)
var month=endDate.getMonth();
var currentMonthFirstDay=new Date(endDate.getFullYear(),month,1)
var firstDate=currentMonthFirstDay.toLocaleDateString().replace(new RegExp("/","g"),"-")
return firstDate
}
console.log(getCurrentMonthFirstDay('2020-11'))//2020-11-1

获取指定年指定月的最后一天

function getCurrentMonthLastDay(currentMonth) {
var endDate=new Date(currentMonth)
var month=endDate.getMonth();
var nextMonth=++month;
var nextMonthFirstDay=new Date(endDate.getFullYear(),nextMonth,1);
var oneDay=1000*60*60*24;
var dateString=new Date(nextMonthFirstDay-oneDay)
return dateString.toLocaleDateString().replace(new RegExp("/","g"),"-")
}
console.log(getCurrentMonthLastDay("2020-11"))//2020-10-30

获取当前季度的第一天

function getFirstDayOfSeason () {
var date = new Date();
var month = date.getMonth();
if(month <3 ){
date.setMonth(0);
}else if(2 < month && month < 6){
date.setMonth(3);
}else if(5 < month && month < 9){
date.setMonth(6);
}else if(8 < month && month < 11){
date.setMonth(9);
}
date.setDate(1);
return date.formatDate('yyyy-MM-dd');;
}
console.log(getFirstDayOfSeason())//2020-10-01

获取两个日期的相差天数

function getDiff(startDate, endDate) {
var stime = Date.parse(new Date(startDate));
var etime = Date.parse(new Date(endDate));
// 两个时间戳相差的毫秒数
var usedTime = etime - stime;
// 计算相差的天数
var days = Math.floor(usedTime / (24 * 3600 * 1000));
// 计算天数后剩余的毫秒数
var leave1 = usedTime % (24 * 3600 * 1000);
// 计算出小时数
var hours = Math.floor(leave1 / (3600 * 1000));
// 计算小时数后剩余的毫秒数
var leave2 = leave1 % (3600 * 1000);
// 计算相差分钟数
var minutes = Math.floor(leave2 / (60 * 1000));
var time = days + "天" + hours + "时" + minutes + "分";
return time;
}
console.log(getDiff("2020-10-01","2020-11-20"))//50天0时0分

获取指定的某一天所在的星期范围

function getWeekRange(date) {
if(!date) return
var now = new Date(date);
var nowDayOfWeek = now.getDay(); // 星期日—>六(0->6)
var nowDay = now.getDate();
var nowMonth = now.getMonth();
var nowYear = now.getYear(); // 2019年是119
nowYear += (nowYear < 2000) ? 1900 : 0;
var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek+1); // 这周的周五
var weekEndDate = new Date(nowYear, nowMonth, nowDay + (7 - nowDayOfWeek)); // 7- 这周的周日 && 用5- 得到这的周五
return weekStartDate.formatDate('yyyy-MM-dd') + " 至 " + weekEndDate.formatDate('yyyy-MM-dd');
}
console.log(getWeekRange("2020-11-11"))//2020-11-09 至 2020-11-15

获取指定的某一天还差几天过年

 function restDayOfYear() {
var fullyear = new Date().getFullYear();
var nextyear = fullyear + 1;
var lastday = new Date(new Date(nextyear,0,1) - 1); //本年的最后一毫秒:
var now = new Date();
var diff = lastday - now; //毫秒数
return Math.ceil(diff / (1000 * 60 * 60 * 24));
}
console.log(restDayOfYear("2020-11-15"))//47

获取指定的某一天是星期几

function getWeekZh(value) {
var dateArray = value.split("-");
var zhWeek = "星期" + "日一二三四五六".charAt(new Date(dateArray[0], parseInt(dateArray[1] - 1), dateArray[2]).getDay());
return zhWeek
}
console.log(getWeekZh("2020-10-10"))//星期六

比较传入的两个日期中第一个日期是否比另外一个日期早

 function compareDate(firstDate,secondDate){
var arrayD1 = firstDate.split("-");
var date1 = new Date(arrayD1[0],arrayD1[1],arrayD1[2]);
var arrayD2 = secondDate.split("-");
var date2 = new Date(arrayD2[0],arrayD2[1],arrayD2[2]);
//日期对象可以直接进行比较
if(date1 < date2) return true;
return false;
}
console.log(compareDate("2020-10-10","2020-11-15"))//true

计算某一时间偏移后的日期

 function getAfterDate(time,count) {
time.setDate(time.getDate() + count);//获取N天后的日期
var date = new Date(+time + 8 * 3600 * 1000);
return date.toJSON().substr(0, 19).replace('T', ' ').replace(/-/g, '.');
}
console.log(getAfterDate(new Date(),100))// 2021.02.23 22:00:36

js--前端开发工作中常见的时间处理问题的更多相关文章

  1. JS前端开发判断是否是手机端并跳转操作(小结)

    JS前端开发判断是否是手机端并跳转操作(小结) 这篇文章主要介绍了JS前端开发判断是否是手机端并跳转操作,非常不错,具有参考借鉴价值,需要的朋友可以参考下 常用跳转代码 ? 1 2 3 4 5 6 7 ...

  2. MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP

    MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP,其中 DATE 类型用于表示日期,但是不会包含时间,格式为 YYYY-MM-DD,而 DATETIME 和 T ...

  3. Visual Studio 2015初体验——前端开发工作的问题

    前言 因为后台项目开发适用的VS2015,为了跟后台开发配合,前端部门也统一从VS2013升级到了VS2015. 因为C盘空间不足要先卸载,这里就不说卸载2013时花了多长时间,只说安装2015时用了 ...

  4. css布局 - 工作中常见的两栏布局案例及分析

    突然想到要整理这么一篇平时工作中相当常见但是我们又很忽视的布局的多种处理方法.临时就在我经常浏览的网站上抓的相对应的截图.(以后看到其他类型的我再补充) 既然截了图,咱们就直接看人家使用的布局方式,毕 ...

  5. [前端] 记录工作中遇到的各种问题(Bug,总结,记录)

    最近一年,在开发实践过程中遇到了不少问题,大多都能得到解决 部分知其原理,部分只能做到解决问题,而半年前遇到的问题,或多或少都忘得差不多了 是该记录一下一些问题,防止再遇到就得再查资料了 1. 浏览器 ...

  6. JS~~~ 前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧!!!!!!

    前端开发一些常用技巧               模块化结构       &&&&&     命名空间处理 奇技淫巧!!!!!!2016-09-29    17 ...

  7. FIS.js前端开发的使用说明文档

    文档结构 什么是FIS 部署FIS FIS基本使用 模块定义 加载方式 调用Tangram 2.0 一.什么是FIS FIS提供了一套贯穿开发流程的开发体系和集成开发环境,为产品线提供前端开发底层架构 ...

  8. 记录我开发工作中遇到HTTP跨域和OPTION请求的一个坑

    我通过这篇文章把今天工作中遇到的HTTP跨域和OPTION请求的一个坑记录下来. 场景是我需要在部署在域名a的Web应用里用JavaScript去消费一个部署在域名b的服务器上的服务.域名b上的服务也 ...

  9. 总结工作中常见的linux命令

    本文是总结下自己在工作中遇到的常见linux 命令,会持续更新! 1.文件路径切换 进入 cd 返回上一级  cd .. 2.复制 cp 源文件名 目标文件夹 cp log.log test5 3.编 ...

随机推荐

  1. 【Redis】利用 Redis 实现分布式锁

    技术背景 首先我们需要先来了解下什么是分布式锁,以及为什么需要分布式锁. 对于这个问题,我们可以简单将锁分为两种--内存级锁以及分布式锁,内存级锁即我们在 Java 中的 synchronized 关 ...

  2. 建议收藏,从零开始创建一个Activiti工作流,手把手教你完成

    环境配置 项目环境: JDK1.8 tomcat7 maven3.5 开发工具: IDEA activiti7 创建项目 目标:创建一个maven项目,集成Activiti,并自动生成25张数据库表 ...

  3. Charles mock数据详解

    Charles是一款非常好用的代理工具,关于Charles的安装.破解.安装证书,连接手机代理等使用方法详见我之前的博客:https://www.cnblogs.com/feng0815/p/8043 ...

  4. 面试中AOP这样说,面试官只有一个字:服!

  5. python3 多线程批量验证POC模板

    #coding:utf-8 import threading,Queue,sys,os class RedisUN(threading.Thread): def __init__(self,queue ...

  6. JQuery案例:暖心小广告

    暖心小广告 写一个页面,每隔3秒显示小广告,再过3秒自动关闭. <head> <meta charset="UTF-8"> <title>暖心广 ...

  7. mysql一条sql语句如何执行的?

    mysql 一条sql语句如何执行的? 文章内容源自:极客时间-林晓彬老师-MySQL实战45讲 学习整理 在了解一条查询语句如何执行之前,需要了解下MySQL的基本架构是怎样的,如下图所示: 可以看 ...

  8. 变更mysql的数据类型兼容小数测试

    来吧 我也没想到有一天要做这个测试: 想分为这几步吧: 1.先看看mysql本身支不支持数据的变更 2.再看看mybatis能不能用int接受double和decimal 先看下mysql: alte ...

  9. Mysql命令、常用函数

    一.sql命令行 查看数据库 show database : 选择使用的数据库 use 数据库名  : 查看表 show tables ; 查询表 select * from 表名     高版本my ...

  10. java备份Oracle数据库表

    <html><head><title>数据备份</title><meta name="decorator" content=& ...