前言

在前端开发工作中,服务端返回的时间数据或者你传递给服务端的时间参数经常会遇到时间格式转换及处理问题。这里分享一些我收集到的一些处理方法,方便日后工作中快速找到。先附上必须了解的知识内置对象传送门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. Python_面试题汇总【正在整理中...】

    1.十大算法 阶乘 冒泡 1 #使用递归实现阶乘 2 3 def f(n): 4 if n ==1: 5 return 1 6 else: 7 return n*(f(n-1)) 使用递归实现阶乘 1 ...

  2. Hadoop框架:MapReduce基本原理和入门案例

    本文源码:GitHub·点这里 || GitEE·点这里 一.MapReduce概述 1.基本概念 Hadoop核心组件之一:分布式计算的方案MapReduce,是一种编程模型,用于大规模数据集的并行 ...

  3. 三步删除U深度,老毛桃,大白菜捆绑软件!!

    ①需要下载一个软件Fbinst Tool(万能U盘制作工具).链接:http://pan.baidu.com/s/1mim9Zxm 密码:7poo②插入U盘,直接打开Fbinst Tool.首先是U深 ...

  4. php(tp5)生成条形码

    因为公司业务需要,研究了一下条形码 1.下载barcodegen扩展包 官网地址:https://www.barcodebakery.com 2.下载完后解压至 extend 文件夹里面,然后复制以下 ...

  5. 来吧,展示!SpringBoot OSS 整合全过程,没见过比这更详细的了

    前言 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务.其数据设计持久性不低于 99.9999999999%(12 ...

  6. Codeforces741D

    dsu on tree 题目链接 点我跳转 题目大意 一棵根为 \(1\) 的树,每条边上有一个字符(\(a-v\)共\(22\)种) 一条简单路径被称为Dokhtar-kosh当且仅当路径上的字符经 ...

  7. 记录一下Comparator的用法

    Collections.sort(res, new Comparator<ArrayList<Integer>>() {             @Override       ...

  8. Java基础教程——运算符

    运算符 算术运算符 加 减 乘 除 取余 自加 自减 + - * / % ++ -- public class 算术运算符 { public static void main(String[] arg ...

  9. 自动化运维工具之Puppet基础入门

    一.简介 puppet是什么?它能做什么? puppet是一个IT基础设施自动化运维工具,它能够帮助系统管理员管理基础设施的整个生命周期:比如,安装服务,提供配置文件,启动服务等等一系列操作:基于pu ...

  10. Java复数的定义与描述

    1 //4.复数的定义与描述 2 package test; 3 4 import java.util.Scanner; 5 6 public class complex {//复数类 7 doubl ...