全国协议5人面授小班,企业级独立开发考核,零基础的软硬件工程师基地

当前位置:首页  >  JavaScript 入门教程1  > 
admin-更新于 2024-10-15

1. 基本使用

Date 需要实例化后使用。

var date = new Date();
代码块
  • 1

时间最大的两个使用场景是格式化时间与获取时间戳。

1.1 获取时间戳

当实例化时没有传递参数给 Date 的时候,则表示创建的对象为实例化时刻的时间。

使用 getTime 即可获取时间戳。

var date = new Date();var timestamp = date.getTime();console.log(timestamp); // 输出当前时间的时间戳
代码块
  • 1
  • 2
  • 3
  • 4

部分开发者会利用隐式转换的规则来获取时间戳。

var date = new Date();var timestamp = +date;console.log(timestamp); // 输出当前时间的时间戳
代码块
  • 1
  • 2
  • 3
  • 4

也可以通过 valueOf 来获取时间戳。

var date = new Date();var timestamp = date.valueOf();console.log(timestamp); // 还是输出当前时间的时间戳
代码块
  • 1
  • 2
  • 3
  • 4

推荐使用 getTime 方法来获取时间戳,以便他人阅读代码以及避免不必要的问题。

1.2 格式化时间

格式化时间可以理解成把时间处理成想要的格式,如年-月-日 时:分;秒

通过 Date 对象提供的一些方法,可以获得到对应的时间属性。

假如想把时间格式化成年/月/日 时:分:秒的形式:

var date = new Date();var YYYY = date.getFullYear();var MM = date.getMonth() + 1;var DD = date.getDate();var hh = date.getHours();var mm = date.getMinutes();var ss = date.getSeconds();console.log([YYYY, '/', MM, '/', DD, ' ', hh, ':', mm, ':', ss].join(''));
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

通过 Date 对象提供的获取年、月、日、时、分、秒的方法获取到对应的值,最后按照想要的格式拼接即可。

需要注意的是 getMonth() 方法返回的月份是 0 至 11 ,更像是月份的索引,实际上对应的月份还要加上 1 。

2. 构造函数的参数

Date 对象可以提供 4 种类型的参数,通过参数决定时间,最后对象的实例的操作都围绕这个决定的时间。

2.1 不传递参数

当不传递参数的时候,时间会被设置为实例化那一时刻的时间。

2.2 Unix 时间戳

这个方式与第一种不传递参数的方式是最常用的两种。

应用场景大部分为从服务端获取数据后,对时间戳进行格式化显示。

var data = { _id: '', createdAt: 1482632382582, content: '' };var date = new Date(data.createdAt);var YYYY = date.getFullYear();var MM = date.getMonth() + 1;var DD = date.getDate();var hh = date.getHours();var mm = date.getMinutes();var ss = date.getSeconds();console.log([YYYY, '/', MM, '/', DD, ' ', hh, ':', mm, ':', ss].join(''));// 输出:2016/12/25 10:19:42
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.3 时间戳字符串

这里并不是指字符串形式的 Unix 时间戳 ,而是符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601 标准的时间字符串。

实际上只要能被 Date.parse 正确解析成时间戳的字符串,都可以作为参数传递过去。

var timestamp = Date.parse('2020/02/02 11:22:33');var date1 = new Date(timestamp);var date2 = new Date('2020/02/02 11:22:33');
代码块
  • 1
  • 2
  • 3
  • 4

2.4 日期的每一个时间属性

这里的时间属性是指:年、月、日、时、分、秒、毫秒。

参数也按照这个顺序传递。

// 2048年10月24日 9点9分6秒var date = new Date(2048, 10 - 1, 24, 9, 9, 6, 0);var YYYY = date.getFullYear();var MM = date.getMonth() + 1;var DD = date.getDate();var hh = date.getHours();var mm = date.getMinutes();var ss = date.getSeconds();console.log([YYYY, '/', MM, '/', DD, ' ', hh, ':', mm, ':', ss].join(''));// 输出:2048/10/24 9:9:6
代码块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

第二个参数之所以要减去 1 ,是因为月份是从 0 开始计算的,所以十月应该表示成 9 。

3. 其他常用方法

常量描述
Date.UTC方法接受的参数同日期构造函数接受最多参数时一样,返回从 1970-1-1 00:00:00 UTC到指定日期的的毫秒数。
Date.now返回自 1970 年 1 月 1 日 00:00:00 (UTC) 到当前时间的毫秒数。
Date.parse解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的 UTC 时间)的毫秒数,如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为NaN。
Date.getDate根据本地时间,返回一个指定的日期对象为一个月中的哪一日(从 1–31)。
Date.getDay根据本地时间,返回一个具体日期中一周的第几天,0 表示星期天。
Date.getFullYear根据本地时间返回指定日期的年份。
Date.getHours方法根据本地时间,返回一个指定的日期对象的小时。
Date.getMilliseconds根据本地时间,返回一个指定的日期对象的毫秒数。
Date.getMinutes方法根据本地时间,返回一个指定的日期对象的分钟数。
Date.getMonth根据本地时间,返回一个指定的日期对象的月份,为基于 0 的值(0 表示一年中的第一月)。
Date.getSeconds方法根据本地时间,返回一个指定的日期对象的秒数。

4. 小结

Date 对象用于处理日期与时间。

通常会采用不传参或者传递一个 Unix 时间戳来生成 Date 实例,另几种参数形式使用场景较少。

需要注意的是,getMonth 方法返回的月份,是从 0 开始计数的,对应真实月份需要加上 1


FreeMarker template error (DEBUG mode; use RETHROW in production!): Template inclusion failed (for parameter value "footer.ftl"): Template not found for name "home/footer.ftl". The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = org.springframework.ui.freemarker.SpringTemplateLoader@303dbb92, loader2 = ClassTemplateLoader(resourceLoaderClass=org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer, basePackagePath="" /* relatively to resourceLoaderClass pkg */)). ---- FTL stack trace ("~" means nesting-related): - Failed at: #include "footer.ftl" [in template "home/information.ftl" at line 178, column 3] ---- Java stack trace (for programmers): ---- freemarker.core._MiscTemplateException: [... Exception message was already printed; see it above ...] at freemarker.core.Include.accept(Include.java:164) at freemarker.core.Environment.visit(Environment.java:335) at freemarker.core.Environment.visit(Environment.java:341) at freemarker.core.Environment.process(Environment.java:314) at freemarker.template.Template.process(Template.java:383) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate(FreeMarkerView.java:391) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender(FreeMarkerView.java:304) at org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel(FreeMarkerView.java:255) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:181) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1406) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1150) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:529) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:114) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: freemarker.template.TemplateNotFoundException: Template not found for name "home/footer.ftl". The name was interpreted by this TemplateLoader: MultiTemplateLoader(loader1 = org.springframework.ui.freemarker.SpringTemplateLoader@303dbb92, loader2 = ClassTemplateLoader(resourceLoaderClass=org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer, basePackagePath="" /* relatively to resourceLoaderClass pkg */)). at freemarker.template.Configuration.getTemplate(Configuration.java:2957) at freemarker.core.Environment.getTemplateForInclusion(Environment.java:3062) at freemarker.core.Include.accept(Include.java:162) ... 72 more