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相关推荐

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

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

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

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

  3. 类型的取值范围_Java基础类型取值范围,从基础的理解加深记忆

    Java有8种基础类型,但是你可能常常会忘记他们的取值范围.而这主要是由于你再依靠默记这些类型的取值范围,而不是从根本上理解. 举例 byte占1个字节,8给比特位,它的取值范围是:-128 ~ 12 ...

  4. new Date().getMonth() 的取值问题

    这是去一家公司的面试题,感觉没有什么难的,不就取出当前的月份循环,然后判断打印几次,请您看一下这几行代码, <SCRIPT language="JavaScript"> ...

  5. C语言中不同类型的取值范围

    C语言中的不同类型的取值范围 前言 C语言中,我们知道最基本的数据类型有int整型,float和double浮点型,char字符型,在计算机里,他们的取值并不是任意和无限的,都有相应的取值范围,那么计 ...

  6. Java中byte类型的取值范围

    取值范围为-128~127 1.为什么是[-128,127]   计算机中存储最大的应该是0111 1111,第一位是符号位,所以表示最大的数值:127   存储的1 1111111应该是最小的数值: ...

  7. html 获取cookie的值,js从Cookies里面取值的简单实现

    工作过程中遇到一个Js从Cookies里面取值的需求,Js貌似没有现成的方法可以指定Key值获取Cookie里面对应的值,参阅网上的代码,简单实现如下: 1. 服务端代码,Page_Load里面Coo ...

  8. int 类型的取值范围

    大伙都知道int类型的 取值范围是 -2147483648 到 2147483647         那为什么不是                              -2147483647 到 ...

  9. 整型的赋值超出该类型的取值范围

    对于unsigned类型来说,编译器必须调整越界值使其满足要求.编译器会将该值对unsigned类型的可能取值数目求模,然后取所得值. 例如:8位的unsigned char,取值范围是0~255,如 ...

最新文章

  1. 基于Python下的Apriltag检测
  2. python在金融工程中的用途-金融工程现在用python多吗?
  3. servlet——登录练习(登录页面登录请求登录请求处理)
  4. CTF——MISC——流量分析
  5. hibernate防止sql注入对参数赋值传参数的例子
  6. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)...
  7. 35. 搜索插入位置011(二分查找)
  8. 【剑指offer - C++/Java】4、重建二叉树
  9. 2019年2月数据库流行度排行: PostgreSQL攀至历史新高
  10. Java dicom查看_验证DICOM文件
  11. 简单方法去除WPS广告
  12. python教程五(imput和while)
  13. 产品学习---互联网形势
  14. 老徐和阿珍的故事:Runnable和Callable有什么不同?
  15. 大师典藏!齐白石-巨匠笔下的小动物系列数字藏品限量发售!
  16. ESP8266基于MicroPython的TCP socket回调函数实现案例
  17. cpu怎么开启php,cpu怎么换
  18. 想不想修真鸿蒙源液有什么用,想不想修真初代小世界怎么玩_想不想修真初代小世界玩法介绍_玩游戏网...
  19. 在没有安装VC软件的电脑上也可以执行的exe文件
  20. jupyter中关于pandas的dataframe行列显示不全与复原

热门文章

  1. 一文搞懂Vue Diff算法
  2. RocketMQ-源码解读与调试
  3. 乐高(LEGO)儿童数码系列电子产品
  4. 自主化拖拽建站有哪些步骤呢?
  5. Python爬取各大外包网站需求
  6. 西门子触摸屏函数翻译_西门子PLC指令,都翻译过来了!
  7. Linux中xmind8 pro 破解(内附序列号,亲测有效)
  8. C语言结构体的定义与使用
  9. ISO 8601日期格式与持续时间格式
  10. otis电梯服务器tt使用说明_OTIS TT电梯操作器操作指南