Javascript日期时间表现形式互转

在一门语言里,一个日期时间一定有3种表现形式,字符串(如2010-11-11 05:07:08),Long型(一般是1970年1月1日至今的毫秒数),内置对象(在Javascript中就是Date);

那么日期时间操作很常用的一个就是上述三种表现形式的互转和格式化(各种格式的字符串);
moment是Javascript的一个日期时间库,使用它可以很方便的实现上述三种表现形式的互转和字符串表现形式的格式化。

日期时间类型的三种表现形式,字符串是给人读的,Long在传递信息时速度更快,内置对象起到一个中转的角色。

1.字符串转内置对象

new Date(moment("2010-11-11 05:07:08","YYYY-MM-DD HH:mm:ss"))
new Date(moment("12-25-1995", "MM-DD-YYYY"))
new Date(moment("29-06-1995", ["MM-DD-YYYY", "DD-MM", "DD-MM-YYYY"]))
new Date(moment("2010-01-01T05:06:07", moment.ISO_8601))

可以这么转的原因:
moment的toString方法默认返回一个"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ",这种格式的字符串,而这个格式恰恰是Date对象的默认返回格式,所以Date对象可以认出这个字符串。如下:
这里写图片描述
2.Long型转内置对象
这个功能一般是语言的内置对象要自带,作为内置对象的一个构造方法存在。
这里写图片描述

上述两个操作可以将任意格式的时间字符串和Long型转成内置对象了,下面是把内置对象转回去。

3.内置对象转为任意格式字符串
事实上,Date对象有有八个内置方法,用于输出为字符串格式,分别为:
1)toString(),把 Date 对象转换为字符串。格式如1所述。
2)toTimeString(),把 Date 对象的时间部分转换为字符串,格式如1所述,取时间部分。
3)toDateString(),把 Date 对象的日期部分转换为字符串,格式如1所述,取日期部分。
4)toGMTString(),获取格林尼治时间字符串
5)toUTCString(),根据世界时,把 Date 对象转换为字符串。
6)toLocaleString(),根据本地时间格式,把 Date 对象转换为字符串。
7)toLocaleTimeString(),根据本地时间格式,把 Date 对象的时间部分转换为字符串。
8)toLocaleDateString(),根据本地时间格式,把 Date 对象的日期部分转换为字符串。
尽管Javascript的Date对象中内置提供了这些输出为字符串的方法,但是这些字符串不是我们来控制格式的,因此如果我们需要我们自己定制的特殊格式,那么又该怎么办呢?
moment提供了强大的format函数,可以将时间display成任意合法格式;

moment(new Date()).format("dddd, MMMM Do YYYY, h:mm:ss a"); 
moment(new Date()).format("ddd, hA");  

4.内置对象转为Long型
跟Long型转为内置对象一样,这个一般也是内置对象提供的功能。Javascript也不例外,Date内置对象提供了getTime方法,返回 1970 年 1 月 1 日至今的毫秒数。Date还有一个静态的方法UTC(),它可以根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数,语法如下

Date.UTC(year,month,day,hours,minutes,seconds,ms)

okay,到这其实就可以结束了。
但是,moment作为一个重量级的Javascript日期时间库,提供了很强大的日期时间操作功能。它其实是对Javascript内置对象Date的封装,所以它可以代替Date对象的中转角色,实现字符串和Long型的互转。
5.任意字符串转Long型
我们知道,Date对象的getTime返回1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,这个其实是UNIX时间戳的计算方式,所以moment提供了一个名为unix的函数,直接获取一个时间的Long型值。
有了这个函数,加上moment本身强大的格式化功能,就可以直接将任意字符串转为Long型了,如下:

moment("2010-11-11 05:07:08","YYYY-MM-DD HH:mm:ss").unix()
moment("12-25-1995", "MM-DD-YYYY").unix()
moment("29-06-1995", ["MM-DD-YYYY", "DD-MM", "DD-MM-YYYY"]).unix()
moment("2010-01-01T05:06:07", moment.ISO_8601).unix()

6.Long型转为任意字符串
在3中已经看到了format函数可以将输出字符串格式化为任意合法的格式,这样就okay了。如下:

moment(1000000).format("dddd, MMMM Do YYYY, h:mm:ss a")
moment(10000000000).format("YYYY-MM-DD hh:mm:ss a");  

总结:你只需要看5和6就可以了。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈振阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值