JS时间函数Date的一些知识点和小坑

本文深入解析JavaScript中的Date对象,涵盖new Date()的各种用法,包括获取当前日期、指定日期、日期转换、日期部分和时间部分的提取,以及如何计算某月的天数和第一天是周几等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天写一个日期的插件,被Date的一些函数搞得晕头转向,总结一下:

1.知识点

  1. new Date() ,返回中国标准时间的当前日期和时间,Tue Apr 14 2020 22:22:37 GMT+0800 (中国标准时间)
  2. new Date(year,month,day) ,返回中国标准时间的指定日期的00:00:00比如,我输入new Date(2020,4,1),则会返回Fri May 01 2020 00:00:00 GMT+0800 (中国标准时间),这里一定要注意,month的取值为0-11,所以如果要获取yyyy年mm月dd日,应该为new Date(yyyy,mm-1,dd)
  3. new Date(“2020-4-1”) ,返回指定日期的00:00:00,Wed Apr 01 2020 00:00:00 GMT+0800 (中国标准时间)
  4. getDate() ,从 Date 对象返回一个月中的某一天 (1 ~ 31)new Date(“2020-4-12”).getDate(),返回12
  5. getDay() ,从 Date 对象返回某一天是周几 (0 ~ 6),分别对应周日到周六。new Date(“2020-4-12”).getDay(),返回0,即为周日
  6. getMonth() ,从 Date 对象返回月份 (0 ~ 11),这里一定要注意。new Date(“2020- 4 -12”).getMonth(),返回 3 ,如果在页面上显示,一定要记得加1
  7. getFullYear() ,从 Date 对象返回年份。new Date(“2020-4-12”).getFullYear(),返回 2020
  8. getHours(),getMinutes(),getSeconds(),getMilliseconds() ,从 Date 对象返回小时,分钟,秒,毫秒,这里没啥好说的
  9. getTime() ,从 Date 对象返回 1970 年 1 月 1 日至今的毫秒数。
  10. **toString() **,把Date对象转成字符串,newDate().toString返回字符串 “Tue Apr 14 2020 22:55:16 GMT+0800 (中国标准时间)”
  11. **toTimeString()和toDateString() **,分别是把Date对象的时间部分和日期部分转成字符串,newDate().toString返回字符串 “Tue Apr 14 2020 22:55:16 GMT+0800 (中国标准时间)”
  12. valueOf(),返回Date对象的时间戳

小坑啊小坑

获取某月的最后一天

从上面我们已经知道,newDate(“yyyy-MM-dd”),返回指定日期与时间,那当传的day=0时,会自动往前推一天,就是上个月的最后一天啦,当然就可以通过getDate获取到是几了,所以,假如要获取4月的天数,那么就是newDate(“2020-5-0”).getDate(),
同样newDate(yyyy,MM,dd)也是返回指定日期与时间,但是,这里要注意month取值0-11,所以,假如获取4月时间,这里应该是newDate(2020,4,0).getDate(),是的,你没看错,这里传的就是4

获取某月的第一天是周几

其实坑是一样的,都是month取值为0-11,周几取值0-6,比如获取2020年4月的第一天是周几就是newDate(2020,3,1).getDay()或者newDate(“2020-4-1”).getDay()

目前就想到这么多,以后遇到再补充了

<think>好的,用户想用layer.js的render方法实现时间选择,然后将选中的时间与当前时间比较,结果显示在input框里。首先,我得回忆一下layerlayui的相关知识。记得layui有一个日期控件laydate,而layer主要是弹层组件,不过用户可能混淆了这两个。用户的问题应该是关于时间选择后的处理,所以应该用laydate而不是layer.render。 接下来,我需要检查用户提供的引用内容。引用[3]中提到了使用laydate.render来限制过去的时间不可选,设置min参数为当前日期。这可能是一个关键点。用户的需求是比较选择的时间当前时间,然后显示结果。所以步骤应该是:初始化日期控件,选择时间后触发事件,获取选中的时间,与当前时间比较,更新input框的值。 然后,我需要确保代码结构正确。首先在HTML中放置input元素,然后通过laydate.render配置,设置elem、type、range等参数。在done回调中处理选中的时间。这里要注意,如果用户选择的是范围(开始结束时间),可能需要拆分处理,但用户的问题可能只是单个时间,或者需要分别比较开始结束时间与当前时间。 然后,比较时间的大小。JavaScript中可以用Date对象来处理,将选中的时间字符串转换为Date对象,然后与new Date()比较。比较结果可以转为“早于”或“晚于”当前时间,并显示在另一个input中。 另外,用户提到要更新到input框内,可能需要两个input:一个用于选择时间,另一个显示结果。或者,可能在同一个input中显示结果,但根据问题描述,应该是将比较结果放在另一个input里。 需要处理时间格式的问题,laydate的format参数需要输入的字符串一致,以便正确解析。比如,如果format是yyyy-M-d H:m:s,那么选中的值会被格式化成这样的字符串,需要用split或其他方法解析成年、月、日等,再创建Date对象。 可能遇到的坑:laydate的range设置为'到'时,返回的值是“开始时间 到 结束时间”这样的字符串,需要用split(' 到 ')来分割,然后分别处理两个时间。但用户的问题可能只需要比较单个时间,所以需要确认是否选择范围。根据用户的问题描述,可能只需要单个时间,但引用[3]中的例子是范围选择,所以需要明确处理两种情况。 另外,laydate的done回调是在选择时间后触发的,这里可以获取到选中的值,然后进行后续处理。确保在回调函数中正确获取值,并更新对应的input。 最后,测试代码是否正确,比如是否正确地转换日期,比较结果是否正确,以及input框是否更新。同时,注意layui的form.render可能需要在动态更新后重新渲染,但如果是普通input,可能不需要。 总结步骤:初始化laydate,配置done回调,在回调中解析选中的时间,转换为Date对象,与当前时间比较,生成提示信息,更新到目标input中。</think>### 分步实现方法 #### 1. HTML结构定义 ```html <!-- 时间选择输入框 --> <input type="text" id="timePicker" placeholder="选择时间"> <!-- 显示比较结果的输入框 --> <input type="text" id="result" readonly> ``` #### 2. 初始化时间选择器 ```javascript laydate.render({ elem: '#timePicker', type: 'datetime', format: 'yyyy-MM-dd HH:mm:ss', done: function(value) { // 选择完成回调 compareTime(value); } }); ``` #### 3. 时间比较逻辑实现 ```javascript function compareTime(selectedTime) { const currentTime = new Date(); const selectedDate = new Date(selectedTime); // 时间差计算(毫秒) const timeDiff = selectedDate - currentTime; // 结果描述生成 let resultText = ''; if (timeDiff > 0) { resultText = '晚于当前时间'; } else if (timeDiff < 0) { resultText = '早于当前时间'; } else { resultText = '等于当前时间'; } // 更新结果输入框 $('#result').val(resultText); } ``` #### 关键点说明: 1. **日期格式一致性**:`format: 'yyyy-MM-dd HH:mm:ss'` 必须与`new Date()`的解析格式匹配[^3] 2. **动态更新机制**:通过`done`回调实现选择后立即触发比较 3. **时区处理**:`new Date()`会自动使用浏览器本地时区
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值