js Date 类型 的取值、计算、格式化 与 moment.js
js Date 类型 的取值、计算、格式化 与 moment.js
前言
笔者工作多年,作为一个爱思考的程序员,一直在想一个问题:究竟怎样才可以让自己变的更强。。
对不起各位,说的太中二了,让我们重新来一遍 : 究竟怎样才可以提高自己的工作能力,提高自己的职业技能,究竟怎样才可以让自己更快、更快的成长。
古人曾经云过,灵光总会在放大的时候一闪而过,而你的任务,就是抓住它,记录它,思考它,并且,去做它,对它赋予行动。
看看自己一天天变秃的脑袋,想想自己一事无成的爹(使用了夸张手法,其实我很佩服我爸);观望一下高富帅的日子,再瞅瞅矮穷挫的自己。 于是, 我只能暗暗下定决心:我必须好好工作。只有好好工作,才能掌握更多的职业技能,积累更多的经验,让自己的能力更上一个台阶,让自己的生活水平更上一个台阶。
灵光一闪 将要而过 ,我伸手去抓,却只见它从我4只手指的指缝间散落,化作三缕金光,隐隐显出文字模样:
没有记录就是没有工作
没有积累就是没有经验
没有整理就是没有掌握
开始
在 javascript 中, Date 类型是个常用的类型。 moment.js 是常用的处理 js Date 的第三方包,在 react,angular,vue 等前端框架 以及 普通的 html 页面 中都可以使用。
本文对 js Date 类型 的使用 以及 moment.js 的常用用法进行整理总结。
实验环境: 谷歌浏览器打开 moment.js 官网 http://momentjs.cn/ , 按 F12,启动console 。 本文的实验均在浏览器console中进行
js Date 类型
首先在console中输入下面代码
let a=new Date();
a;
此时输出为
Sun Jan 05 2020 00:49:38 GMT+0800 (中国标准时间)
可以看到,这个Date对象是一个比较复杂的对象,很多时候需要格式转化才能得到我们需要的格式。
当前日期为 2020年1月5日00点49分,周日;下面我们需要从对象a中获取对应的年月日等信息。将下面的代码一行一行输入console,结果如下:
a.getDate(); //从 Date 对象返回一个月中的某一天 (1 ~ 31)。
//5
a.getDay(); //从 Date 对象返回一周中的某一天 (0 ~ 6)。
//0
a.getMonth(); //从 Date 对象返回月份 (0 ~ 11)。
//0
a.getFullYear(); //从 Date 对象以四位数字返回年份。
//2020
从结果可以看出,getMonth、getDay 的结果 需要特殊注意,否则可能搞错。
下面我们获取时分秒等
a.getHours(); //返回 Date 对象的小时 (0 ~ 23)。
//0
a.getMinutes(); //返回 Date 对象的分钟 (0 ~ 59)。
//49
a.getSeconds(); //返回 Date 对象的秒数 (0 ~ 59)。
//38
a.getMilliseconds(); //返回 Date 对象的毫秒(0 ~ 999)。
//785
获取时分秒的结果与期望值一致。
同时,上面的 年月日时分秒的get方法,都有对应的set方法。 方法如下:
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)。
比如,想给a增加一个小时,则代码如下:
a.setHours(a.getHours()+1);
给a减去一个小时也是类似,+1变成-1就可以了。
也可以通过下面代码来增加一天:
a.setHours(a.getHours()+24);
即Date类型会自动处理单位的进位等操作(setHours(24)会自动加一天,48则加2天,-48则减2天)。
关于Date类型的几个toString方法
toString() 把 Date 对象转换为字符串。
toTimeString() 把 Date 对象的时间部分转换为字符串。
toDateString() 把 Date 对象的日期部分转换为字符串。
toUTCString() 根据世界时,把 Date 对象转换为字符串。
toLocaleString() 根据本地时间格式,把 Date 对象转换为字符串。
toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。
toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。
toISOString() 方法可以使用ISO标准将 Date 对象转换为字符串。该标准称为 ISO-8601 ,格式为: YYYY-MM-DDTHH:mm:ss.sssZ
其中,可能 toISOString 最接近我们需要的格式,但是也有点区别。若我们需要的是’YYYY-MM-DD HH:mm:ss’字符串,则没有太好的方法可以实现,除非我们使用getYear等方法自己来拼接字符串。
可以看出,js Date 的使用还是不够人性化,代码不够简洁、明确。 很多时候,我们可以使用moment.js来处理日期时间,来达到更好的代码体验。
moment.js
首先我们简单看一下moment是什么。 在 http://momentjs.cn/ 页面 F12 打开的console中,直接可以使用 moment.js.
复制下面代码到console
let m = moment();
m;
可以看到输出值是一个对象,与 new Date 有明显的不同。
下面我们来从m中获取年月日时分秒等数据。
m.year(); //年
//2020
m.month(); //月 ,0到11
//0
m.date(); //日
//5
m.hour(); //时
//1
m.minute(); //分
//18
m.seconds(); //秒
//44
其他 week 等, 也是相同的方式取得,具体可以参考官方文档;
为year赋值
m.year(2040);
m.year();
//2040
其他赋值类似;
增加2天
m.add(2,'days'); // 可以用 d 代替 days
m.date();
//7
若减少两天,可以把2改为-2即可。 具体的简写对照表如下
Key Shorthandyears yquarters Qmonths Mweeks wdays dhours hminutes mseconds smilliseconds ms
格式化输出字符串:
m.format('YYYY-MM-DD HH:mm:ss');
//"2040-01-07 01:18:44"
其他格式可以参考官方文档。
参考资料
js Date 介绍 https://www.w3school.com.cn/js/jsref_obj_date.asp
moment.js官网 : http://momentjs.cn/
js Date 类型 的取值、计算、格式化 与 moment.js相关推荐
- html 签到功能,从一个签到功能(日历)到 js Date 类型的全了解
最近工做工做遇到一个签到功能,网上找了不少日历插件,发现都不是很适合,或者说不能很好的实现产品的需求,结果仍是本身撸了一个,撸的过程也是对js Date 类型从新学习了一遍,对 Date 类型的方法也 ...
- js Date类型相关(一)——定义指定时间
需求 最近项目中引入一个问题:每条数据的考核周期都是固定的上月的26号0:0:0到当月的25号23:59:59这个区间段,那么问题来了,如何js定义指定的时间呢? 官方API new Date(for ...
- 类型的取值范围_Java基础类型取值范围,从基础的理解加深记忆
Java有8种基础类型,但是你可能常常会忘记他们的取值范围.而这主要是由于你再依靠默记这些类型的取值范围,而不是从根本上理解. 举例 byte占1个字节,8给比特位,它的取值范围是:-128 ~ 12 ...
- new Date().getMonth() 的取值问题
这是去一家公司的面试题,感觉没有什么难的,不就取出当前的月份循环,然后判断打印几次,请您看一下这几行代码, <SCRIPT language="JavaScript"> ...
- C语言中不同类型的取值范围
C语言中的不同类型的取值范围 前言 C语言中,我们知道最基本的数据类型有int整型,float和double浮点型,char字符型,在计算机里,他们的取值并不是任意和无限的,都有相应的取值范围,那么计 ...
- Java中byte类型的取值范围
取值范围为-128~127 1.为什么是[-128,127] 计算机中存储最大的应该是0111 1111,第一位是符号位,所以表示最大的数值:127 存储的1 1111111应该是最小的数值: ...
- html 获取cookie的值,js从Cookies里面取值的简单实现
工作过程中遇到一个Js从Cookies里面取值的需求,Js貌似没有现成的方法可以指定Key值获取Cookie里面对应的值,参阅网上的代码,简单实现如下: 1. 服务端代码,Page_Load里面Coo ...
- int 类型的取值范围
大伙都知道int类型的 取值范围是 -2147483648 到 2147483647 那为什么不是 -2147483647 到 ...
- 整型的赋值超出该类型的取值范围
对于unsigned类型来说,编译器必须调整越界值使其满足要求.编译器会将该值对unsigned类型的可能取值数目求模,然后取所得值. 例如:8位的unsigned char,取值范围是0~255,如 ...
最新文章
- 基于Python下的Apriltag检测
- python在金融工程中的用途-金融工程现在用python多吗?
- servlet——登录练习(登录页面登录请求登录请求处理)
- CTF——MISC——流量分析
- hibernate防止sql注入对参数赋值传参数的例子
- Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)...
- 35. 搜索插入位置011(二分查找)
- 【剑指offer - C++/Java】4、重建二叉树
- 2019年2月数据库流行度排行: PostgreSQL攀至历史新高
- Java dicom查看_验证DICOM文件
- 简单方法去除WPS广告
- python教程五(imput和while)
- 产品学习---互联网形势
- 老徐和阿珍的故事:Runnable和Callable有什么不同?
- 大师典藏!齐白石-巨匠笔下的小动物系列数字藏品限量发售!
- ESP8266基于MicroPython的TCP socket回调函数实现案例
- cpu怎么开启php,cpu怎么换
- 想不想修真鸿蒙源液有什么用,想不想修真初代小世界怎么玩_想不想修真初代小世界玩法介绍_玩游戏网...
- 在没有安装VC软件的电脑上也可以执行的exe文件
- jupyter中关于pandas的dataframe行列显示不全与复原