浅谈javascript中关于日期和时间的基础知识


Posted in Javascript onJuly 13, 2016

前面的话

在介绍Date对象之前,首先要先了解关于日期和时间的一些知识。比如,闰年、UTC等等。深入了解这些,有助于更好地理解javascript中的Date对象。本文将介绍javascript关于日期和时间的基础知识

标准时间一般而言的标准时间是指GMT和UTC,以前是GMT,现在是UTC

GMT

格林尼治标准时间(GMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线

理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟

地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。现在的标准时间——世界协调时间(UTC)提供

UTC

世界协调时间(UTC)又称世界统一时间,世界标准时间,国际协调时间,全称Coordinated Universal Time,是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统

这套时间系统被应用于许多互联网和万维网的标准中,中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8

在军事中,协调世界时区会使用“Z”来表示。又由于Z在无线电联络中使用“Zulu”作代称,协调世界时也会被称为"Zulu time"

日期时间字符串格式

ECMAScript定义了一个基于简化的ISO8601扩展格式的日期时间的字符串互换格式

日期时间完整格式为:  YYYY-MM-DDTHH:mm:ss.sssZ

[注意]前置0不能省略,否则在完整格式的情况下会报错

YYYY    公历中年的十进制数字,如果这个参数值在0-99之间,则向它加上1900
-      在字符串中直接以“-”(破折号)出现两次
MM     一年中的月份,从01(一月)到12(十二月)
DD     月份中的日期,从01到31
T      在字符串中直接以“T”出现,用来表明时间元素的开始
HH     用两个十进制数字表示的,自午夜0点以来的小时数
:      在字符串中直接以“:”(冒号)出现两次
mm     是用两个十进制数字表示的,自小时开始以来的分钟数
ss     是用两个十进制数字表示的,自分开始以来的秒数
.      在字符串中直接以“.”(点)出现
sss     是用三个十进制数字表示的,自秒开始以来的毫秒数
Z      是时区偏移量,由(“Z”(指UTC)或“+”或“-”)和后面跟着的时间表达式hh:mm组成

只表示日期的格式:  YYYY YYYY-MM YYYY-MM-DD

[注意]所有数字必须是10进制的。如果缺少MM或DD字段,用“01”作为它们的值。如果缺少mm或ss字段,用“00”作为它们的值,对于缺少的sss用“000”作为它的值。对于缺少的时区偏移量用“Z”

闰年

年分为闰年和平年,平年有365天,闰年有366天,闰年的2月比平年多一天

闰年的定义是(可被4整除)且((不可被100整除)或(可被400整除))的年份

口诀是:四年一闰,百年不闰,四百年再闰

function IsLeapYear(year){
  if(typeof year == 'number'){
    if((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0){
      return 'leap year'
    }else{
      return 'common year'
    }
  }
  return 'please input number'
}
console.log(IsLeapYear(4));//'leap year'
console.log(IsLeapYear(400));//'leap year'
console.log(IsLeapYear(2000));//'leap year'
console.log(IsLeapYear(1900));//'common year'

月日

一年有12个月,其中4、6、9、11月每月有30天;如果是闰年,2月有29天,否则 ,2月有28天。1、3、5、7、8、10、12月每月有31天

在javascript中,月的计算从0开始,所以1-12月,分别用0-11来表示;而日的计算则从1开始,1就代表第1天,以此类推

if(month == 2){
  //如果是闰年
  if((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0){
    days = 29;
  //如果是平年
  }else{
    days = 28;
  }
//如果是第4、6、9、11月
}else if(month == 4 || month == 6 ||month == 9 ||month == 11){
  days = 30;
}else{
  days = 31;
}

在javascript中,月份的简写经常在日期字符串中使用

一月    Jan January
二月    Feb February
三月    Mar March
四月    Apr April
五月    May May
六月    Jun June
七月    Jul July
八月    Aug August
九月    Sep September
十月    Oct October
十一月   Nov November
十二月   Dec December

星期

星期是从星期日开始,到星期六结束,分别用0-6来表示

在javascript中,各星期的简写经常在日期字符串中使用

星期日  sunday     Sun
星期一  monday     Mon
星期二  Tuesday    Tue
星期三  Wednesday   Wed
星期四  Thursday    Thu
星期五  Fridday    Fri
星期六  Saturday    Sar

时分秒

1天 = 24小时 = 24*60(1440)分 = 24*60*60(86400)秒 = 86,400,000毫秒
  1分= 60秒
  1小时 = 3600秒
  1天 = 86400秒

Date对象返回的是一个毫秒数,经常需要将其换算成时分秒的形式

date = 100000s
day(天) = Math.floor(100000/86400) = 1
hour(小时) = Math.floor((100000%86400)/3600) = 3
minute(分) = Math.floor((100000%3600)/60) = 46
second(秒) = Math.floor(100000%60)=40
console.log(100000 === 1*86400+ 3*3600+ 46*60+40);//true

以上这篇浅谈javascript中关于日期和时间的基础知识就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
利用javascript解决图片缩放及其优化的代码
May 23 Javascript
如何编写高质量JS代码(续)
Feb 25 Javascript
javascript使用递归算法求两个数字组合功能示例
Jan 03 Javascript
使用vue构建一个上传图片表单
Jul 04 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
Nov 29 Javascript
微信小程序版翻牌小游戏
Jan 26 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
Nov 08 Javascript
jQuery实现每日秒杀商品倒计时功能
Sep 06 jQuery
原生JS无缝滑动轮播图
Oct 22 Javascript
Vue表单控件数据绑定方法详解
Feb 05 Javascript
Vue项目配置跨域访问和代理proxy设置方式
Sep 08 Javascript
全网小程序接口请求封装实例代码
Nov 06 Javascript
jQuery EasyUI菜单与按钮详解
Jul 13 #Javascript
JQuery对ASP.NET MVC数据进行更新删除
Jul 13 #Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 #Javascript
Bootstrap登陆注册页面开发教程
Jul 12 #Javascript
深入浅析knockout源码分析之订阅
Jul 12 #Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 #Javascript
JavaScript导航脚本判断当前导航
Jul 12 #Javascript
You might like
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python实现按行切分文本文件的方法
2016/04/18 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
2018/04/26 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
C# .NET面试题
2015/11/28 面试题
实习生个人找工作的自我评价
2013/10/30 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
解放思想演讲稿
2014/09/11 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
详解Redis基本命令与使用场景
2021/06/01 Redis
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL