需求

有时候项目中会遇到这些问题,比如:我想获取当前时间中的时分秒,又或者说是想单独获取年份,月份,日等。这就需要对Date类型的方法做点了解了。

还有一种场景是我想将当前时间转换成“yyyy-mm-dd HH:mm:ss”等固定格式的,今天我们就来探讨一下。

方法

Date对象中的具体方法主要可以分为两大类:

  • 一类是设置时间的方法(这里我暂且把它叫做set时间方法)
  • 一类是获取时间的方法(这里我暂且把它叫做get时间方法)。

1.get方法

方法

作用

getFullYear()

通过Date对象获取四位数字表示的年份

getMonth()

通过Date对象获取一年中第几个月份,取值是0-11

getDate()

通过Date对象获取一个月中的某一天,取值是1-31

getDay()

通过初始化的Date对象获取一周中的第几天,取值是0(周日)- 6(周六)

getHours()

通过初始化的Date对象获取小时数,取值是0-23

getMinutes()

通过初始化的Date对象获取分钟数,取值是0-59

getSeconds()

通过初始化的Date对象获取秒数,取值是0-59

getMilliseconds()

通过初始化的Date对象获取毫秒数,取值是0-999

getTime()

获取从1970年1月1日到通过初始化Date对象的毫秒数

2.set方法

方法

作用

setFullYear(yyyy)

通过Date对象设置四位数字表示的年份yyyy

setMonth(mm)

通过Date对象设置一年中第几个月份mm

setDate(dd)

通过Date对象设置一个月中的某一天dd

setHours(hh)

通过初始化的Date对象设置小时数hh

setMinutes(mm)

通过初始化的Date对象设置分钟数mm

setSeconds(ss)

通过初始化的Date对象设置秒数ss

setMilliseconds(ms)

通过初始化的Date对象设置毫秒数ms

setTime(ms)

设置从1970年1月1日到通过初始化Date对象的毫秒数ms

set时间的方法中的参数类型是整数类型。其中的参数没有大小的限制。比如:setMonth(mm)方法,可能你认为mm的大小会限制在0-11之间,其实不然,据验证,当其参数超过了11时,比如D.setMonth(12),该方法就会将D时间对象存储的年份进位1个单位,这有些像二进制、八进制、十进制中的逢二进一、逢八进一、逢十进一一样的道理。

实例

1.将当前时间按”yyyy/mm/dd hh:min:ss”的形式

var D = new Date();   //获取当前时间的时间对象
var yyyy = D.getFullYear();  //获取四位数字表示的年份/*获取月份,
+1是因为getMonth方法返回的0(一月份)-11(十二月份)*/
var mm = D.getMonth()+1;  var dd = D.getDate();     //获取日期
var hh = D.getHours();    //获取小时数
var min = D.getMinutes();   //获取分钟数
var ss = D.getSeconds();    //获取秒//分隔符
var sep1 = "/";
var sep2 = ":";
//用"0"补位不足两位数的时间
mm = (mm<10)?("0"+mm):mm;dd = (dd<10)?("0"+dd):dd;hh = (hh<10)?("0"+hh):hh;min = (min<10)?("0"+min):min;ss = (ss<10)?("0"+ss):ss;var format = yyyy+sep1+mm+sep1+dd+" "+hh+sep2+min+sep2+ss;
//就在我这里此时的时间是:2017/06/03 11:37:01 

2.45天之后的日期是多少

var D = new Date();   //获取今天的时间对象
var dd = D.getDate();  //获取今天是几号
var d45 = dd+45;      //加45天
D.setDate(d45); //此时D对象已经被设置成了45天之后的时间对象
/**此处再写上上例中获取时间的方法即可得到相应格式的日期字符串
**/

注意:js中的new Date() 获取到的是本地时间,如果想获取服务器时间,两种方式:

  1. java后台中直接new Date();
  2. js获取Date ——>
Date d = new Date($.ajax({async:true}).getResponseHeader("Date"));

注意:方法二不建议使用,他会不定期的报bug(根据电脑配置以及不同浏览器之间),最后结果就会导致时间获取不到前端报错,从而使时间默认成1970-01,即计算机默认时间!   具体解决办法请看这篇文章——>

解决IE浏览器显示1970问题


格式化

在网上可以搜到的方法很多,在这里,我举一个自己认为最简洁的,也最通俗易懂的方法,适合匹配所有; -->正则表达式写法

Date.prototype.Format=function(fmt){var o={"M+":this.getMonth()+1,//月份"d+":this.getDate(),//日"H+":this.getHours(),//小时"m+":this.getMinutes(),//分"s+":this.getSeconds(),//秒"q+":Math.floor((this.getMonth()+3)/3),//季度"S+":this.getMilliseconds()//毫毛};if(/(y+)/.test(fmt)) fmt=fmt.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length));for (var k in o)if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));return fmt;};

调用

var time=new Date().Format("yyyy-MM-dd");
var time=new Date().Format("yyyy-MM-dd HH:mm:ss");

当然,这个方法也行,只不过觉得emmm.....脑补~~

var d = new Date('Thu May 12 2016 08:00:00 GMT+0800 (中国标准时间)');
var datetime=d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();

看个人选择吧~~~~~~

注意

另外在此之前,自己使用的也不是这个方法,是自己认为简单的,结果没想到是有bug的 -.-,在这里列出来也给广大同胞们提个醒。

我这里给出的需求是这样的,因为我这里只需要获取“yyyy-mm”,如下

话不多说,上代码:

var yearmonth = new Date();
//此方法的作用是将时间格式转换为“yyyy-mm”,比如“2019-04”,其中toLocaleDateString
//的作用是将date转换为“yyyy/mm”的字符串,join方法是将其转换为“yyyy-mm”
yearmonth = yearmonth.toLocaleDateString().split('/').join('-');if(yearmonth.length == 10){
yearmonth = yearmonth.substr(0,7);
}else{
yearmonth = yearmonth.substr(0,4) + "-0" + yearmonth.substr(5,1);
}

接下来,我要说一下这样写存在的坑在哪:

其实主要原因是在于toLocaleDateString()这个方法,他在不同浏览器中得到的结果不太一样,例如

# firefox
> new Date().toLocaleDateString()
> output: "2019/04/30"#IE11
> new Date().toLocaleDateString()
> output: "2019-4-30"#Chrome < 58
> new Date().toLocaleDateString()
> output: "2019/4/30"#Chrome >= 58
> new Date().toLocaleDateString()
> output: "2019-4-30"

在不同浏览器之间,他可能会抛出uncaught TypeError: cannot read property 'length' of undefined。空指针异常

所以尽可能的不要用toLocaleDateString()这个方法

获取当月第一天

//其中Format是使用上面格式化的函数的
var firstDayOfMonth= new Date(new Date().getFullYear(), new Date().getMonth()-1, 1).Format("yyyy-MM-dd HH:mm:ss");

获取当月的最后一天

//其中Format函数是采用上面格式化函数
var lastDayOfMonth= new Date(new Date().getFullYear(), new Date().getMonth(), 0).Format("yyyy-MM-dd HH:mm:ss");

参考文献

https://blog.csdn.net/xiyan_yuan/article/details/77879892

https://segmentfault.com/a/1190000009391790

https://blog.csdn.net/weixin_39256994/article/details/81611791

js Date类型相关(二)——获取时间、格式化时间以及当前月第一天、最后一天相关推荐

  1. js Date类型相关(一)——定义指定时间

    需求 最近项目中引入一个问题:每条数据的考核周期都是固定的上月的26号0:0:0到当月的25号23:59:59这个区间段,那么问题来了,如何js定义指定的时间呢? 官方API new Date(for ...

  2. js Date 类型 的取值、计算、格式化 与 moment.js

    js Date 类型 的取值.计算.格式化 与 moment.js 前言 笔者工作多年,作为一个爱思考的程序员,一直在想一个问题:究竟怎样才可以让自己变的更强.. 对不起各位,说的太中二了,让我们重新 ...

  3. html 签到功能,从一个签到功能(日历)到 js Date 类型的全了解

    最近工做工做遇到一个签到功能,网上找了不少日历插件,发现都不是很适合,或者说不能很好的实现产品的需求,结果仍是本身撸了一个,撸的过程也是对js Date 类型从新学习了一遍,对 Date 类型的方法也 ...

  4. java 表达式 日期加减_jdk8获取当前时间|时间加减|java8时间格式化|时间处理工具|时间比较|线程安全的时间处理方法...

    目录 前言 在很久之前,我总结了一些jdk7版本之前的关于时间处理的一些公共方法,日期转换成字符串.指定时间加上指定天数后的日期.获取上周周一时间 等等:具体的可以戳链接查看完整的:https://b ...

  5. Java中Date类型如何向前向后滚动时间,( 附工具类)

    Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: 1 import java.text.SimpleDateFormat; 2 import java.util.Cale ...

  6. python,时间加减,时间计算,时间格式化,时间提取汇总

    From: http://bbs.chinaunix.net/thread-1371304-1-1.html 不知道这么写题目会不会让人误会,不过这个题目可以让从搜索引擎上搜索问题的菜鸟们一下找到这篇 ...

  7. JS中使用定时动态获取系统当前时间

    场景 实现 html代码: <div class="form-group col-md-4"><label>调整时间:</label><i ...

  8. JS Date对象计算100天以后的时间

    核心:setDate(); 属性 描述 setDate() 必需.表示一个月中的一天的一个数值(1 ~ 31):0 为上一个月的最后一天-1 为上一个月最后一天之前的一天如果当月有 31 天:32 为 ...

  9. java 获取日期格式化时间_java获取当前时间并格式化

    java获取当前时间并格式化 private static final DateTimeFormatter FORMAT_FOURTEEN = DateTimeFormatter.ofPattern( ...

最新文章

  1. JQuery实现倒计划按钮
  2. [Dijstra] 洛谷 P2939 改造路
  3. 酱油和gbt酱油哪个好_韩国酱油真的这么好,到底怎么挑?
  4. 2021-2025年中国乙酰丙酸乙酯行业市场供需与战略研究报告
  5. centos7中使用LVM管理磁盘和挂载磁盘
  6. C#工程添加了DLL编译运行时却提示”无法加载DLL“的解决方案
  7. win10安装Visual Stdio2010教程及问题解决办法
  8. 长视频鏖战15年后 爱奇艺这份财报窥见“新蓝海“
  9. 三星+t800+原生android,三星T800(GALAXY Tab S WLAN版)一键救砖教程,轻松刷回官方系统...
  10. 论文 查重 知网 万方 paperpass
  11. Typecho插件:根据自定时间自动切换主题
  12. win10 WLAN共享给以太网口
  13. Linux实用教程(第三版)
  14. 在list中筛选出符合条件的数据(返回list)
  15. 5G 时代,优酷推出的帧享究竟是什么?
  16. 史上讲解最好的Docker教程,从入门到精通(建议收藏的教程)
  17. 正味集团冲刺港股:年营收3.4亿杨声耀夫妇控制64%股权
  18. 利用泰勒公式求sin(x)近似值(Python)
  19. excel转java 常量_【转】八种常见Excel错误提示及解决方法
  20. IDE(ATA),SATA,SCSI的区别

热门文章

  1. 华山论剑之iOS网站大乱斗
  2. 苏宁易购推员工持股计划,意味新一轮高速发展到来
  3. iOS/swift之获取系统所有相册和照片录像、封装相册多选
  4. 计算机组成原理课程设计:基于FPGA的Verilog模型机设计。
  5. 使用JavaScript输出偶数
  6. IDE(21)——常用Java IDE开发工具之 Eclipse 介绍
  7. Generation of a LOT number for an Inventory item via API in R12
  8. 计算机网课用什么app,电脑录屏软件哪个好?游戏直播网课我都用它录制
  9. MYSQL基本知识02
  10. matlab set path 在哪,matlabsetpath