前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaScript日期处理

JavaScript日期处理

作者头像
奋飛
发布于 2019-08-15 01:51:23
发布于 2019-08-15 01:51:23
4.5K40
代码可运行
举报
文章被收录于专栏:Super 前端Super 前端
运行总次数:0
代码可运行

​ 日期处理,在前端开发过程中会经常遇到。不同的开发者处理日期都有自己的想法。下面提供几种常见的日期问题。

​ 当然,Github上提供了好多优秀的日期处理插件(如:Datejsdate-fnsjquery-dateFormat),然而当处理一些简单的日期操作去引用插件,还是挺耗费资源。

写在前面

  • 时区(Time Zone):是地球上的区域使用同一个时间定义;
  • 世界标准/协调时间(Coordinated Universal Time):1970年1月1日午夜(零时)开始经过的毫秒数来保存日期; new Date().getTime() // 任意时区下当前时间的毫秒值相同
  • 格林威治时间(GMT):是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。 ·new Date().getTimezoneOffset() / 60; // -8,即英国的当地时间比中国的北京时间晚8小时

Date类型

在讲述常见日期问题之前,先梳理一下Date类型的方法。

常用方法列表:

方法

描述

Date()

返回当日的日期和时间。

getDate()

从 Date 对象返回一个月中的某一天 (1 ~ 31)。

getDay()

从 Date 对象返回一周中的某一天 (0 ~ 6)。

getMonth()

从 Date 对象返回月份 (0 ~ 11)。

getFullYear()

从 Date 对象以四位数字返回年份。

getHours()

返回 Date 对象的小时 (0 ~ 23)。

getMinutes()

返回 Date 对象的分钟 (0 ~ 59)。

getSeconds()

返回 Date 对象的秒数 (0 ~ 59)。

getMilliseconds()

返回 Date 对象的毫秒(0 ~ 999)。

getTime()

返回 1970 年 1 月 1 日至今的毫秒数。

getTimezoneOffset()

返回本地时间与格林威治标准时间 (GMT) 的分钟差。

parse()

返回1970年1月1日午夜到指定日期(字符串)的毫秒数。

setDate()

设置 Date 对象中月的某一天 (1 ~ 31)。

setMonth()

设置 Date 对象中月份 (0 ~ 11)。

setFullYear()

设置 Date 对象中的年份(四位数字)。

setHours()

设置 Date 对象中的小时 (0 ~ 23)。

setMinutes()

设置 Date 对象中的分钟 (0 ~ 59)。

setSeconds()

设置 Date 对象中的秒钟 (0 ~ 59)。

setMilliseconds()

设置 Date 对象中的毫秒 (0 ~ 999)。

setTime()

以毫秒设置 Date 对象。

toSource()

返回该对象的源代码。

toString()

把 Date 对象转换为字符串。

toTimeString()

把 Date 对象的时间部分转换为字符串。

toDateString()

把 Date 对象的日期部分转换为字符串。

toUTCString()

根据世界时,把 Date 对象转换为字符串。

toLocaleString()

根据本地时间格式,把 Date 对象转换为字符串。

toLocaleTimeString()

根据本地时间格式,把 Date 对象的时间部分转换为字符串。

toLocaleDateString()

根据本地时间格式,把 Date 对象的日期部分转换为字符串。

UTC()

根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。

valueOf()

返回 Date 对象的原始值。

补充:

  • 可以通过getUTCMonth、setUTCMonth等方法设置世界时的年、月、日、时、分、秒、毫秒。
  • 把Date对象转化为字符串
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new Date().toString();      // "Fri Aug 05 2016 11:54:25 GMT+0800 (CST)"
   new Date().toDateString()   // "Fri Aug 05 2016"
   new Date().toTimeString()   // "11:54:48 GMT+0800 (CST)"
  • 获取指定时间毫秒
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 2016年8月5日 */
Date.parse('08/05/2016'); // 1470326400000
new Date('08/05/2016').getTime(); // 1470326400000
Date.UTC(2016, 7, 5); // 1470355200000

UTC()方法中,月份从0开始且获得的毫秒值是世界时(即需要+8小时)

获取过去第n天的时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 获取过去的n天
 * @param data 过去的天数
 * @param date 指定日期
 */
function getBeforeDay(data, date) {
  var date = date || new Date(),
      timezone = "+08:00";  // 时区
  var now = setTimezone.call(date, timezone.replace(":",".")); // 获取指定时区的当前日期
  var beforeDay = new Date(Date.parse(now.toString()) - 86400000 * data);
  return format.call(beforeDay, "yyyy/MM/dd"); // 格式化日期
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 设置时区
 * @param tzn
 * @returns {setTimezone}
 */
function setTimezone(tzn) {
  tzn = tzn * 60 * -1;
  this.setTime(this.getTime() - (tzn - this.getTimezoneOffset()) * 60 * 1000);
  return this;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 日期格式化
 * @param format
 * @returns {*}
 */
function format (format) {
  var o = {
    "M+": this.getMonth() + 1,   //month
    "d+": this.getDate(),      //day
    "h+": this.getHours(),     //hour
    "m+": this.getMinutes(),   //minute
    "s+": this.getSeconds(),   //second
    "q+": Math.floor((this.getMonth() + 3) / 3), //quarter
    "S": this.getMilliseconds() //millisecond
  };
  if (/(y+)/.test(format)) {
    format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  }
  for (var k in o) {
    if (new RegExp("(" + k + ")").test(format)) {
      format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
    }
  }
  return format;
}

获取指定月份的天数

方式一:日历字典表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 获取指定月份的天数
 * 像月份、星期这样可列举且不易发生改变、数据项不是很大的,建议使用字典直接展现出来!!
 * @param year 年份,如:2016
 * @param month 月份,如:0(注意,遵循默认日历,从0开始)
 */
function getDaysInMonth (year, month) {
  return [31, (isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
}

/**
 * 判断是否为瑞年
 */
function isLeapYear(year) { 
  return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0); 
}

方式二:通过日历构造器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 获取指定月份的天数
 * @param year 年份,如:2016
 * @param month 月份,如:0(注意,遵循默认日历,从0开始)
 */
function getDaysInMonth (year, month) {
  // 将天置为0,会获取其上个月的最后一天
  // 获取1月份的天数
  // new Date(2016, 2 , 0) ==> Mon Feb 29 2016 00:00:00 GMT+0800 (CST)
  var date = new Date(year, month + 1, 0);
  return date.getDate();
}

获取上个周的开始时间(上周一)&结束时间(上周日)

获取本周第一天,然后before(1)、before(7)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getDayOfLastWeek(){
  var weekday = new Date().getDay();    // 获取当前是周几(周日:0)
  weekday = weekday === 0 ? 7 : weekday;
  var firstDay = getBeforeDay(weekday + 7 -1);
  var lastDay = getBeforeDay(weekday);
  return {
    lastWeekFirstDay: firstDay,
    lastWeekLastDay: lastDay
  };
}

获取上个月的开始时间和结束时间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 *  new Date(年, 月, 日)  ==> 月份从0开始
 */
function getDayOfLastMonth(){
  var date = new Date(),
      currentMonth = date.getMonth();
  return {
    lastMonthFirstDay: format.call(new Date(date.getFullYear(), currentMonth - 1, 1), "yyyy/MM/dd"),
    lastMonthLastDay: format.call(new Date(date.getFullYear(), currentMonth, 0), "yyyy/MM/dd")
  }
}

由上述示例,可获取当月的第一天和最后一天及指定月份的第一天和最后一天。

格外注意

需要注意合理处理跨月、跨年的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new Date(2016, 7, 32);  // Thu Sep 01 2016 00:00:00 GMT+0800 (CST)
new Date(2016, 12, 1);  // Sun Jan 01 2017 00:00:00 GMT+0800 (CST)

最后,推荐两个不错的插件: - 日历插件,非常灵活:bootstrap-daterangepicker - 日期转换、格式化:moment

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年08月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
4 条评论
热度
最新
跪求 你这个编码主题风格包
跪求 你这个编码主题风格包
33点赞举报
你好,现奉上团队vscode相关配置
你好,现奉上团队vscode相关配置
回复回复点赞举报
Gist Id: adff035853cbec6d6d7be4809443de5d token:ae5e36c894b909bb2577acbde083a739c92fa038
Gist Id: adff035853cbec6d6d7be4809443de5d token:ae5e36c894b909bb2577acbde083a739c92fa038
回复回复点赞举报
查看全部3条回复
推荐阅读
编辑精选文章
换一批
JavaScript 时间与日期
知识点: 1.Date类型 2.通用的方法 3.格式化方法 4.组件方法 JavaScript提供了Date类型来处理时间和日期。Date类型内置一系列获取和设置日期时间信息的方法。 一.Date类型 Date类型是在早期Java中java.util.Date类基础上构建的。为此,Date类型使用UTC (Coordinated Universal Time,国际协调时间[又称世界统一时间]) 1970年1月1日午夜(零时)开始经过的毫秒来保存日期。在使用这种数据存储格式的条件下,Dat
汤高
2018/01/11
1.9K0
关于Date对象那些事
获取当前日期时间,我们知道通过方法 new Date() 就可以得到,但是获取到是一个标准格式时间 Fri Jan 18 2019 13:56:47 GMT+0800 (中国标准时间)。但通常我们更渴望得到 2019-01-18 13:56:47 或者 2019/01/18 13:56:47 这种格式。
celineWong7
2020/11/05
8580
vue 手写一个时间选择器
最近研究了 DatePicker 的实现原理后做了一个 vue 的 DatePicker 组件,今天带大家一步一步实现 DatePicker 的 vue 组件。
小皮咖
2019/11/05
2.5K0
JavaScript 学习-20.Date 日期对象
前言 JavaScript Date日期对象用于处理日期和时间。 创建日期 有四种方式初始化日期 new Date() // 当前日期和时间 new Date(milliseconds) //返回从 1970 年 1 月 1 日至今的毫秒数 new Date(dateString) new Date(year, month, day, hours, minutes, seconds, milliseconds) 实例化一个日期 var a = new Date
上海-悠悠
2022/05/25
9910
js中日期格式化常用方法
任何语言中都会有对时间相关处理的方法,JavaScript中当然也有很多时间相关的方法,但是平时我们用到的很少,像我就是,总是记不住,用到的时候就去搜一下,但是网上推荐的总是类似的文章,有时候就会错过很多好用的方法,今天就来总结一下相关的方法,用的时候再也不愁了。
十里青山
2022/08/22
6.3K0
nodejs时间工具类
/** * * @fmt 格式化字符串 * @Date 为需要格式化的日期 * * 示例:format(new Date(),'yyyy-MM-dd hh:mm:ss'); * 返回值为字
用户1141560
2017/12/26
1.7K0
Js中Date对象
JavaScript的Date对象是用于处理日期和时间的全局对象,Date对象基于Unix Time Stamp,即自1970年1月1日UTC起经过的毫秒数。
WindRunnerMax
2020/10/26
21.6K0
Javascript日期时间总结(转)
从后台返回的C#时间为:/Date(-62135596800000)/,这个是C#的DateTime.MinValue; 要在html页面展示,一个方法是后端先处理成yyyy-MM-dd HH:mm:ss的格式,前端直接展示。 如果后端不做处理,就需要前端来做处理了,下面就是看前端处理的这种情况。
山河木马
2019/03/05
4.9K0
Javascript日期时间总结(转)
一起Polyfill系列:让Date识别ISO 8601日期时间格式
一、什么是ISO 8601日期时间格式   ISO 8601是国际标准化组织制定的日期时间表示规范,全称是《数据存储和交换形式·信息交换·日期和时间的表示方法》。   示例:   1. 2014-12-12T00:00:00.000Z   2. 2014-12-12T00:00:00.000+08   3. 2014-12-12T00:00:00.000+0800   4. 2014-12-12T00:00:00.000+08:00   5. 2004-W17-3   6. 0001-165 详细说明请参考
^_^肥仔John
2018/01/18
1.7K0
JavaScript中Date对象的那些事儿
任何事情都离不开时间,太阳每天升起的时间,每天你上班的时间,中午吃饭时间等等。在编程生涯中,无时无刻都有一个时间来引导,如数据创建时间(createTime),更新时间(updateTime)等。今天来说说JavaScript的Date对象。
Javanx
2019/09/05
9350
JavaScript中Date对象的那些事儿
js中进行数字,超大金额(千位符),日期时间格式化处理
最近遇到一个需求,对于社区里讨论的帖子展示一个访问量的计数显示问题,当超过多少页面访问量时,就让其显示xxx万,xx亿
itclanCoder
2020/10/28
4.4K0
js中进行数字,超大金额(千位符),日期时间格式化处理
时间与日期处理
主要有以下类: NSDate -- 表示一个绝对的时间点 NSTimeZone -- 时区信息 NSLocale -- 本地化信息 NSDateComponents -- 一个封装了具体年月日、时秒分、周、季度等的类 NSCalendar -- 日历类,它提供了大部分的日期计算接口,并且允许您在NSDate和NSDateComponents之间转换 NSDateFormatter -- 用来在日期和字符串之间转换 NSDate NSDate用来表示公历的GMT时间(格林威治时间)。 有下面几种初始化方法:
猿人谷
2018/01/17
3.3K0
时间与日期处理
为什么到了时间你的活动还没开始——探究Date对象
假设有一个活动,原计划定的是12月25日早上8点开始,结果苹果用户到了早上8点却看见活动按钮还是灰色的,而且PC、安卓都是正常。这种情况如果发生,首先往哪个方向考虑呢?
lhyt
2019/09/08
1.6K0
JavaScript 日期
JavaScript 日期 JavaScript 日期输出 默认情况下,JavaScript将使用浏览器的时区并将日期格式显示为全文本字符串: Tue Apr 02 2019 09:01:19 GMT+0800 创建 Date 对象 Date对象由 Date() 构造函数创建 new Date() new Date():使用当前日期和时间创建新的日期对象: var date = new Date(); new Date(year,month,…) 格式:new Date(year,month,day,ho
Mirror王宇阳
2020/11/13
1.2K0
js常用方法和一些封装 -- 时间相关(附案例详解)
昨天上传的时候少了一个方法,现在补上: //日期转换 function transformDate(date){ if(typeof date =="string"){ return new Date(date.replace(/-/ig,"/").replace("T"," ")); }else{ return date; } } 勘误:_center()方法中timeBox应改为dom,封装方法的时候忘了改过来了,现在已更正。 本文介绍一些时间操
剽悍一小兔
2018/05/17
1.9K0
JS前端Date(日期)
Date日期对象是一个构造函数,主要用来获取时间和对时间进行一系列操作。Date 类型将日期保存为自协调世界时(UTC,Universal Time Coordinated)时间 1970 年 1 月 1 日午夜(零时)至今所经过的毫秒数。
IT工作者
2022/05/13
10.5K0
前端开发:JS获取当前日期方法(各种获取时间的奇葩需求汇集)
在前端开发过程中,有时候会需要获取当前时间和已知时间做对比的需求,也有单纯的获取当前时间然后传给后台,还有各种需要把获取到的当前时间转化成特定的时间格式传给后台,这虽然不是一个复杂的操作,但是不同的产品需求不一样,有时候还需要转时区。总之,就是各种稀奇古怪的需求,那么本篇博文就来分享一下关于在前端开发过程中获取当前时间或者日期相关的各种操作。
三掌柜
2022/04/12
8K0
前端开发:JS获取当前日期方法(各种获取时间的奇葩需求汇集)
需要知道的JS的日期知识,都在这了
JS中的 Date 很奇怪。当我们需要处理日期和时间的时候比较麻烦,经常借助像date-fns和 Moment 这样的库。
前端小智@大迁世界
2019/07/02
2.7K0
JS基础-JS内置对象Date详解
year:表示年份的整数值。0到99会被映射至1900年至1999年,其它值代表实际年份。
用户10106350
2022/10/28
3.9K0
几个JavaScript极短日期时间代码片段(你值得拥有)
日期是不是今天,我们只需要判断 日期的 年月日 是否与 当前日期的 年月日一致即可,所以我们的常规代码片段如下:
coder_koala
2021/11/10
1.2K0
几个JavaScript极短日期时间代码片段(你值得拥有)
推荐阅读
相关推荐
JavaScript 时间与日期
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验