详解JavaScript UTC时间转换方法
这篇文章主要介绍了JavaScript UTC时间转换方法,介绍了本地时间到UTC时间的转换、UTC日期到本地日期的转换,感兴趣的小伙伴们可以参考一下
一、前言
1、UTC: Universal Time Coordinated,协调世界时。
2、格林尼治标准时(GMT)
格林尼治标准时间(Greenwich Mean
Time,GMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。
地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。现在的标准时间——协调世界时(UTC)——由原子钟提供。
自1924年2月5日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。而UTC是基于标准的GMT提供的准确时间。
GMT(Greenwich Mean Time)——格林尼治标准时间,格林尼治标准时间是19
世纪中叶大英帝国的基准时间,同时也是事实上的世界基准时间。当时主要为了1840 年之后的铁路系统服务。它以格林尼治天文台的经线为0
度经线,将世界分为24 个时区,除了在特定时期受到仇外心理、民族主义和某些反英心绪的影响之外,它的地位一直未曾动摇。
GMT和UTC的区别
GMT
手表就是可以显示两个或两个以上时区时间的手表。无论用什么方式,显示多个时区最直接的方法就是在一个表壳里装多枚机芯。不过最经济也最常见的方法还是附加一个带有12
小时或24
小时时标刻度的旋转表圈。旋转表圈的使用方法很简单,将表圈上对应第二时区时间的数字对齐表盘的时针即可,如果表盘时间是伦敦时间,那么将表圈顺时针转动一小时,指示的就是欧洲大陆时间,逆时针转动八小时,则是美国西海岸时间。
将表盘时间设定为家乡时间还是目的地时间取决于使用者的偏好,但由于12 小时手表无法辨别白天晚上,通常还是设定所在地时间比较合理。有一个事件的发生使得GMT 的定义复杂化了:1972 年1 月1日,UTC(协调世界时)成为新的世界标准时间。
为了方便, 通常记成Universal Time Coordinated。同样为了方便,在不需要精确到秒的情况下,通常也将GMT
和UTC 视作等同。尽管UTC 更加科学更加精确,但是对于手表玩家和收藏者来说,GMT 仍是更加受欢迎的。有不少人认为,UTC
是巴黎图谋世界计时中心地位的一种手段。事实上,它是以原子时为基础,在时刻上尽量接近世界时的一种时间计量系统。它的出现是现代社会对于精确计时的需要。
原子时与以往的计时系统不同,它非常精确并且不以某地的平均太阳时为基准,但是遇有地球自转速度不均匀,原子时与世界时之间的时差便日积月累,因
此,UTC 会在一段时期后加上正或负的闰秒来补偿。因此协调世界时与国际原子时(TAI)
之间会出现若干整数秒的差别。位于巴黎的国际地球自转事务中央局(IERS) 负责决定何时加入闰秒。
北京时间与格林尼治时间或UTC时间相差8个时区,北京、上海、重庆位于东8区,所以北京时间2013-1-1 0:00:00,转换为UTC时间为:Tue Jan 1 00:00:00 UTC+0800 2013,时间过了8小时。
二、本地时间到UTC时间的转换
当地时间到UTC时间的转换,步骤如下:
1、将字符串日期转换为日期数据类型
如果已经是日期类型,可以省去此步骤。
可利用下面示例中的函数进行转换。
2、获取UTC日期数据
包括年月日,时分秒,使用getUTC***()方法获取。
获取年:var y = date.getUTCFullYear();
获取月: var m = date.getUTCMonth() ;
获取日: var d = date.getUTCDate();
获取小时:var h= date.getUTCHours();
获取分钟:var M = date.getUTCMinutes();
获取秒钟:var s = date.getUTCSeconds();
这里date为日期类型数据。
注意:这里使用没有UTC的方法是有问题(例如:date.getFullYear,date.getMonth),在进行下一步转换时,会出现结果错误。
3、使用Date.UTC()函数进行转换
将第2步中获取的日期数据转换为UTC时间(实际上为自1700年以来的毫秒数)
var utc = Date.UTC(y,m,d,h,M,s);
这里,y、m、d、h、M、s分别代表步骤2中获取的年、月、日、时、分、秒数值。
三、UTC日期到本地日期的转换
UTC日期到本地日期转换则要简单得多,先将UTC时间转换为日期格式,然后再转换为本地日期格式,例如:
var date2 = new Date(utc); var localeString = date2.toLocaleString();
或只要日期
var localeDateString = date2.toLocaleDateString();
或只要时间
var localeTimeString = date2.toLocaleTimeString();
实例:
//日期加减计算
function dateadd(sdate, delta, ymdh){
if(!sdate ) return; if(typeof sdate == 'object') sdate = sdate.toLocaleString(); /(\d{4})[\D](\d{1,2})[\D](\d{1,2})[\D]?\s(\d{1,2}):(\d{1,2}):(\d{1,2})/.exec(sdate);
var a = [0,0,0,0]; switch(ymdh){
case 'y':
a = [delta, -1, 0, 0];
break;
case 'm':
a=[0, delta-1, 0, 0];
break;
case 'H':
a=[0, -1, 0, delta];
break;
default:
a = [0, -1, delta, 0];
break;
} println('date:' + (parseInt(RegExp.$1)+ a[0]) + '-'+ (parseInt(RegExp.$2)+a[1]) +'-' + (parseInt(RegExp.$3)+a[2])
+ ' ' + (parseInt(RegExp.$4)+a[3]) +':' + RegExp.$5 + ':' +RegExp.$6); return new Date(parseInt(RegExp.$1)+ a[0], parseInt(RegExp.$2)+a[1], parseInt(RegExp.$3)+a[2], parseInt(RegExp.$4)+a[3], RegExp.$5,RegExp.$6);
} //UTC转换
println('---------------------------------------------');
var sdate='2013-01-01 00:00:00.0';
var d = dateadd(sdate,0);
var d2 = Date.UTC(d.getUTCFullYear(),d.getUTCMonth() ,d.getUTCDate(),d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds());
println('原日期:' + sdate);
println('d2:' + d2);
println('d3:' + new Date(d2));
println('d4:' + new Date(d2).toLocaleString());
println('d5:' + d2.toLocaleString());
测试结果:
---------------------------------------------
date:2013-0-1 0:00:00
原日期:2013-01-01 00:00:00.0
d2:1356969600000
d3:Tue Jan 1 00:00:00 UTC+0800 2013
d4:2013年1月1日 0:00:00
d5:1,356,969,600,000.00
可以看到UTC时间实际上是一串以自1970年以来的毫秒数表示的长数字。
以上就是本文的全部内容,希望对大家的学习有所帮助。
(原文地址:http://www.jb51.net/article/77636.htm)
详解JavaScript UTC时间转换方法的更多相关文章
- 详解JavaScript的任务、微任务、队列以及代码执行顺序
摘要: 理解JS的执行顺序. 作者:前端小智 原文:详解JavaScript的任务.微任务.队列以及代码执行顺序 思考下面 JavaScript 代码: console.log("scrip ...
- 详解javascript的类
前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...
- 详解Javascript的继承实现(二)
上文<详解Javascript的继承实现>介绍了一个通用的继承库,基于该库,可以快速构建带继承关系和静态成员的javascript类,好使用也好理解,额外的好处是,如果所有类都用这种库来构 ...
- 【转】详解JavaScript中的this
ref:http://blog.jobbole.com/39305/ 来源:foocoder 详解JavaScript中的this JavaScript中的this总是让人迷惑,应该是js众所周知的坑 ...
- js对象详解(JavaScript对象深度剖析,深度理解js对象)
js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...
- 详解 javascript中offsetleft属性的用法(转)
详解 javascript中offsetleft属性的用法 转载 2015-11-11 投稿:mrr 我要评论 本章节通过代码实例介绍一下offsetleft属性的用法,需要的朋友可以做一 ...
- 详解javascript中的this对象
详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...
- 详解JavaScript调用栈、尾递归和手动优化
调用栈(Call Stack) 调用栈(Call Stack)是一个基本的计算机概念,这里引入一个概念:栈帧. 栈帧是指为一个函数调用单独分配的那部分栈空间. 当运行的程序从当前函数调用另外一个函数时 ...
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
随机推荐
- SDUT OJ 数据结构实验之二叉树四:(先序中序)还原二叉树
数据结构实验之二叉树四:(先序中序)还原二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...
- Unity3d 中 将远程 MySQL 数据库转换为本地 Sqlite
1.创建MySQL2Sqlite脚本mysql2sqlite.sh:(代码地址:https://gist.github.com/esperlu/943776) #!/bin/sh # Converts ...
- CentOS 中查看软件的版本号
CentOS 中查看软件的版本号 1. rpm 查看 [root@hadoop110 ~]# rpm -qa | grep mysql mysql-community-client--.el6.x8 ...
- vuex的小疑问记录
actions和mutations的区别是Action提交的是Mutation,不能够直接修改state中的状态,而Mutations是可以直接修改state中状态的:Action是支持异步操作的,而 ...
- 116th LeetCode Weekly Contest N-Repeated Element in Size 2N Array
In a array A of size 2N, there are N+1 unique elements, and exactly one of these elements is repeate ...
- 给json格式化的一个小工具
var glob = require("glob") // options is optional var fs=require("fs") glob(&quo ...
- elastic 常用查询操作
_ GET http://127.0.0.1:9200/_cat/health?v 健康状况 GET http://127.0.0.1:9200/_cat/indices?v ...
- opencv + ffmpeg
opencv2.4.13 与 ffmepg 3.0 一起是可以安装成功的.注意编译ffmpeg时, ./configure --enable-shared 否则会报错. 另外,把以上组合换成ope ...
- android应用签名详解
1.Eclipse工程中右键工程,弹出选项中选择 android工具-生成签名应用包: 2.选择需要打包的android项目工程: 3.如果已有私钥文件,选择私钥文件 输入密码,如果没有私钥文件见 第 ...
- elasticsearch清空type下的所有数据
DELETE /twitter/tweet/_query{"query": { "match_all": {} }} 注:twitter为index,tweet ...