JavaScript日期和时间处理手册

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》

​ 

✨ 前言

        日期和时间在应用开发中是非常常用的功能。本文将全面介绍JavaScript中处理日期和时间的方法,让你可以快速上手各种日期操作。

本文将讲解:

  • 创建和解析Date对象的各种方法
  • 抽取日期的指定部分如年、月、日等
  • 格式化日期显示不同格式字符串
  • 通过偏移进行日期时间的计算
  • 时间戳与Date的相互转化
  • 处理时区和国际时间表示
  • Moment.js的便捷用法
  • 如何实现一个日期选择器

准备掌握JavaScript的日期和时间处理技能了吗?让我们开始吧!

第一节:Date对象

        Date对象在JavaScript中用于表示日期和时间,它是一个构造函数。创建Date对象有以下几种方式:

  1. 不传参创建当前日期和时间的Date对象:
    let now = new Date();
  2. 传递表示日期时间的毫秒数创建Date对象:
    let date = new Date(1674192000000); // 指定毫秒数
  3. 传递日期时间参数创建Date对象:
    new Date(2023, 0, 1); // 2023-01-01
    new Date(2023, 0, 1, 12, 0, 0); // 2023-01-01 12:00:00
  4. 解析字符串创建Date对象:
    new Date('2023-01-01');

        Date对象具有丰富的方法可以获取日期各个部分,进行格式化和计算。理解Date对象的创建方式,是学习日期处理的第一步。

第二节:获取时间

        可以通过下列Date对象的方法获取到日期时间的细节部分:

  • getFullYear() 获取四位年份
  • getMonth() 获取月份(0-11)
  • getDate() 获取当前月中的天数(1-31)
  • getDay() 获取星期几(0-6)
  • getHours() 获取小时(0-23)
  • getMinutes() 获取分钟(0-59)
  • getSeconds() 获取秒(0-59)
  • getMilliseconds() 获取毫秒(0-999)
  • getTime() 获取总的毫秒数

例如获取当前时间:

let now = new Date();now.getFullYear(); // 2023
now.getMonth(); // 0
now.getDate(); // 15
now.getDay(); // 1 表示星期二

        getMonth()需要注意月份范围是0-11,实际月份要加1。这些方法可以获取Date对象表示时间的各个组成部分。

第三节:格式化日期

        获取到Date对象时间信息后,可以进行格式化后输出需要的日期字符串:

  1. toISOString() 输出标准ISO格式
    let now = new Date();
    now.toISOString(); // 2023-01-15T13:49:35.029Z
  2. toUTCString()/toLocaleString() 输出UTC或本地格式
  3. 自定义格式化
    let date = new Date();let str = date.getFullYear() + '-' +(date.getMonth() + 1) + '-' +date.getDate(); // 2023-01-15

第四节:日期计算

        可以通过给Date对象的毫秒数做算术运算来计算新的日期:

let date = new Date(2023, 0, 1); // 2023-01-01let newDate = new Date(date.getTime() + 5 * 24 * 60 * 60 * 1000);
// 5天后的日期

        Date对象也提供了许多方法可以快捷计算新日期:

  • setDate(d) 设置日期
  • setMonth(m) 设置月份
  • setFullYear(y) 设置年份
  • setHours(h) 设置小时
  • setMinutes(m) 设置分钟
  • setSeconds(s) 设置秒

例如增加一个月:

let date = new Date(2023, 0, 1); date.setMonth(date.getMonth() + 1);

        这些方法可以对Date对象进行日期时间的运算和偏移得到新日期。

第五节:时间戳转换

        时间戳是从1970年1月1日到当前日期的总毫秒数。

        Date对象与时间戳的相互转换:

// Date -> 时间戳
let date = new Date();
let ts = date.getTime();// 时间戳 -> Date
let date = new Date(1673875600000);

         时间戳是一个整数,可以更方便地进行存储和传输,并通过Date对象解析为本地时间。

        接下来我将介绍日期的国际化和时区处理,以及一些实用的第三方库,欢迎提出您的意见!

第六节:国际时间和时区

        Date对象默认创建的时间是当前环境的本地时间。我们可以转换为UTC时间:

let date = new Date();
date.toUTCString(); //转换为UTC时间

 也可以显示特定时区的时间:

date.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai'}); // 中国时区时间

处理时间对象时,需要注意时区问题,显示给用户的时间信息是否正确。

  • Date对象的时间原点

        Date对象中的时间是以1970年1月1日00:00:00作为时间原点的,这个时间被称为Unix Epoch时间。Date对象中存储的毫秒数是从时间原点开始算起的。

        这就是getTime()返回的毫秒数,以及创建Date对象时传入的毫秒数的参数代表的意义。

  • 本地时间与UTC时间

        Date对象默认首先创建表示当前环境的本地时间。我们可以通过转换显示UTC时间:

let d = new Date();
d.toUTCString();

        UTC时间与本地时间可能存在时差,需要注意。在网络传输时推荐使用标准的UTC时间。

  • 夏令时的影响

        有一些地区实行夏令时,这会导致本地时间在夏令时期间会增加1个小时。

        这可能会对表示当地时间造成影响,需要注意正确显示时间。

  • 不同地区显示不同时区时间

        展示给用户查看的时间信息,需要显示正确的时区时间,而不是固定的UTC时间:

d.toLocaleString('zh-CN', {timeZone: 'Asia/Shanghai'});

        根据用户所在地区动态显示本地格式和时区时间非常重要。 

第七节:第三方库Moment.js

        Moment.js是一个轻量的日期处理库,提供了更便捷的日期格式化和操作方法:

let now = moment();now.format('YYYY-MM-DD'); // 格式化
now.add(1, 'd'); // 增加1天

        Moment.js可以快速处理复杂的日期格式,计算跨度等操作。

第八节:日期选择控件

        可以利用Date对象构建日期选择器:

  1. 生成年、月、日菜单供选择
  2. 计算选择的日期结果
  3. 高亮显示当前选择日期

        合理运用Date对象的方法,可以实现功能强大的日期选择器,提高用户体验。

  • 生成日期选择菜单

        可以通过获取当前年月日信息,调用setFullYear()、setMonth()、setDate()方法生成年、月、日的选择菜单。

        增加前后导航按钮可以切换年月。

  • 选择日期时实时更新

        可以给菜单添加onchange事件,当用户选择年、月、日时,实时构建选中的日期对象,并更新显示。

  • 高亮今天日期

        可以获取今天的日期,比较选择框中的日期,如果相同就添加特殊样式来高亮显示今天。

  • 禁用不可选择日期

        可以定一些规则,例如只能选择今天之后的日期,灰显过去的日期,通过启用disable属性来禁止选择。

  • 国际化

        可以根据不同语言和地区显示不同的日期文本,如月份名称等。

  • 浮层显示

        可以用浮动div将日期选择器渲染成一个浮层,点击输入框时弹出。

代码示例:


<div id="date-picker"><select id="year"></select><select id="month"></select><select id="day"></select><div id="selected-date"></div></div>
// 生成年份选择菜单
const yearSelect = document.getElementById('year');for (let i = 1990; i <= 2030; i++) {let opt = document.createElement('option');opt.value = i;opt.innerHTML = i;yearSelect.appendChild(opt);
}// 生成月份选择菜单
const monthSelect = document.getElementById('month');for (let i = 1; i <= 12; i++) {let opt = document.createElement('option');opt.value = i;opt.innerHTML = i;monthSelect.appendChild(opt);
} // 选择日期时更新显示
function updateDate() {let year = yearSelect.value;let month = monthSelect.value;let day = daySelect.value;let displayDate = year + '-' + month + '-' + day;selectedDate.innerHTML = displayDate; 
}yearSelect.onchange = monthSelect.onchange = updateDate;

         以上演示了基本的日期选择实现,还可以继续优化交互、样式等。

✨ 结语     

        在这个内容丰富的指南中,我们全面介绍了JavaScript中处理日期和时间的各种方法 - 从Date对象的创建、各种获取时间方法、格式化显示、进行计算以及与时间戳相互转换等,涵盖了日期时间处理的方方面面。

        同时,我们也提到了一些需要注意的重点,比如本地时间与UTC时间、时区和国际时间的处理等。最后,还给出了一些额外的资源,如Moment.js这样优秀的第三方库。

        我尽力用通俗易懂的语言和示例代码做了全面的解读,希望这篇指南可以成为JavaScript日期和时间处理的参考指南,能够帮助大家快速上手。

        如果您在学习和使用过程中,还有任何疑问或建议,欢迎在评论区与我互动讨论。时间处理是开发中必不可少的功能,希望我们可以共同进步。感谢您的观看!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/611082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专业课128分总分400+南京理工大学818信号系统与数字电路南理工考研经验分享

专业课128分总分400南京理工大学818信号系统与数字电路南理工电光院考研经验分享&#xff0c;希望自己的经历对大家有借鉴。 我是在六月底确认自己保不上研然后专心备考的&#xff0c;时间确实比较紧张。虽然之前暑假看了一点高数&#xff0c;但因为抱有保研的期望&#xff0c…

SPI协议介绍

文章目录 一、硬件连线二、引脚含义三、传输示例四、传输模式 一、硬件连线 二、引脚含义 引脚含义DO&#xff08;MOSI - Master Output Slave Input&#xff09;主机发数据&#xff0c;从机收数据DI&#xff08;MISO - Master Input Slave Output&#xff09;主机收数据&…

HarmonyOS4.0系统性深入开发15Want概述

Want概述 Want的定义与用途 Want是对象间信息传递的载体&#xff0c;可以用于应用组件间的信息传递。其使用场景之一是作为startAbility()的参数&#xff0c;包含了指定的启动目标以及启动时需携带的相关数据&#xff0c;如bundleName和abilityName字段分别指明目标Ability所…

金和OA C6 upload_json 任意文件上传漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 upload_json接口处存在任意文件上传漏洞&#xff0c;攻击者可以通过构造特殊请求包上…

LTESniffer:一款功能强大的LTE上下行链路安全监控工具

关于LTESniffer LTESniffer是一款功能强大的LTE上下行链路安全监控工具&#xff0c;该工具是一款针对LTE的安全开源工具。 该工具首先可以解码物理下行控制信道&#xff08;PDCCH&#xff09;并获取所有活动用户的下行链路控制信息&#xff08;DCI&#xff09;和无线网络临时…

三分钟教你学会设置PICO不自动休眠

三分钟教你学会设置PICO不自动休眠 大家经常会有这种困扰吧&#xff0c;“诶&#xff0c;我去倒杯水&#xff0c;怎么屏幕就黑了”或者“啊这个活动怎么要在线看这么久&#xff0c;好想去玩手机”之类的。会出现这种问题是因为PICO将自动休眠的时间设置得非常短&#xff0c;大…

Flink-CEP 实战教程

文章目录 1. 基本概念1.1 CEP 是什么1.2 模式&#xff08;Pattern&#xff09;1.3 应用场景 2. 快速上手2.1 引入依赖2.2 入门实例 3. 模式API&#xff08;Pattern API&#xff09;3.1 个体模式3.1.1 基本形式3.1.2 量词&#xff08;Quantifiers &#xff09;3.1.3 条件&#x…

AI Agent落地先行者实在智能:2023人工智能领军者、百强、TOP30揭榜

实在智能连登三榜&#xff01; 【2023年十佳人工智能行业领军人物】 【2023年度人工智能领域创新企业】 【2023年度最具投资价值企业】 喜大普奔&#xff01;近期&#xff0c;国内科技行业颇具含金量的三张榜单接连发布&#xff0c;实在智能皆榜上有名&#xff0c;“2023「…

网络编程套接字(Socket)

文章目录 1 重点知识2 预备知识2.1 理解源IP地址和目的IP地址2.2 认识端口号2.3 理解 "端口号" 和 "进程ID"2.4 理解源端口号和目的端口号2.5 认识TCP协议2.6 认识UDP协议2.7 网络字节序 3 socket编程接口3.1 socket 常见API3.2 sockaddr结构 4 简单的UDP网…

【Java集合篇】 ConcurrentHashMap在哪些地方做了并发控制

ConcurrentHashMap在哪些地方做了并发控制 ✅典型解析✅初始化桶阶段&#x1f7e2;桶满了会自动扩容吗&#x1f7e0;自动扩容的时间频率是多少 ✅put元素阶段✅扩容阶段&#x1f7e0; 拓展知识仓&#x1f7e2;ConcurrentSkipListMap和ConcurrentHashMap有什么区别☑️简单介绍一…

解决录制的 mp4 视频文件在 windows 无法播放的问题

解决录制的 mp4 视频文件在 windows 无法播放的问题 kazam 默认录制保存下来的 mp4 视频文件在 windows 中是无法直接使用的&#xff0c;这是由于视频编码方式的问题。解决办法&#xff1a; 首先安装 ffmeg 编码工具&#xff1a; sudo apt-get install ffmpeg 然后改变视频的…

BIND DNS 自定义zabbix监控

一、DNS统计计数器 Bind9可以使用rndc stats 命令将相关DNS统计信息存储到工作目录下&#xff0c;默认位置在&#xff1a; statistics-file "/var/named/data/named_stats.txt"; 每当名称服务器执行rndc stats命令&#xff0c;都会统计在统计信息文件最后附加一…

极少数据就能微调大模型,一文详解LoRA等方法的运作原理

原文&#xff1a;极少数据就能微调大模型&#xff0c;一文详解LoRA等方法的运作原理 最近和大模型一起爆火的&#xff0c;还有大模型的微调方法。 这类方法只用很少的数据&#xff0c;就能让大模型在原本表现没那么好的下游任务中“脱颖而出”&#xff0c;成为这个任务的专家…

第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例

文章目录 1.XtraBackup备份工具的简介2.XBK备份工具的安装3.XBK备份工具的使用语法4.XBK备份前的准备5.使用XBK对全库进行备份5.1.XBK备份全库数据的语法格式5.2.使用XBK进行全库备份5.3.查看XBK备份的数据文件5.4.备份过程中生产的XBK文件 6.模拟故障案例并使用XBK恢复备份的数…

openssl3.2 - 官方dmeo学习 - server-arg.c

文章目录 openssl3.2 - 官方dmeo学习 - server-arg.c概述笔记备注END openssl3.2 - 官方dmeo学习 - server-arg.c 概述 TLS服务器, 等客户端来连接; 如果客户端断开了, 通过释放bio来释放客户端socket, 然后继续通过bio读来aceept. 笔记 对于开源工程, 不可能有作者那么熟悉…

Python操作excel-读取、表格填充颜色区分

1.场景分析 遇到一个需要读取本地excel数据&#xff0c;处理后打入到数据库的场景&#xff0c;使用java比较重&#xff0c;python很好的解决了这类问题 2.重难点 本场景遇到的重难点在于&#xff1a; 需要根据表格内的背景颜色对数据进行筛选 读取非默认Sheet 总是出现Value…

day-05 删除子串后的字符串最小长度

思路 通过不断地检查是否含有"AB"或"CD"&#xff0c;如果有则将其从字符串中删除&#xff0c;直到"AB"或"CD"都不存在时&#xff0c;返回字符串的长度 解题方法 //检测是否有"AB" for(int i0;i<len-1;i){ if(s.charAt(i…

Python画国旗

前言 今天&#xff0c;我们来用turtle库来绘制国旗 一、美国国旗 国旗的形状是长方形;国旗的长宽之比为19:10&#xff0c;美国国旗由红、白、蓝三色组成;画面格局由两部分组成&#xff0c;旗的左上方蓝底上排列着50颗白色的星&#xff0c;6颗一排与5颗一排相间排列&#xff…

创建一个郭德纲相声GPTs

前言 在这篇文章中&#xff0c;我将分享如何利用ChatGPT 4.0辅助论文写作的技巧&#xff0c;并根据网上的资料和最新的研究补充更多好用的咒语技巧。 GPT4的官方售价是每月20美元&#xff0c;很多人并不是天天用GPT&#xff0c;只是偶尔用一下。 如果调用官方的GPT4接口&…

K8S存储卷和数据卷

容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的&#xff0c;delete&#xff0c;k8s用控制器创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态也会恢复到初始状态&#xff0c;一旦回到初始状态&#xff0c;所有的后天编辑的文件都会消失 容器…