首页 web前端 js教程 详解JavaScript UTC时间转换方法_javascript技巧

详解JavaScript UTC时间转换方法_javascript技巧

May 16, 2016 pm 03:21 PM
javascript 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年以来的毫秒数表示的长数字。

以上就是本文的全部内容,希望对大家的学习有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何使用WebSocket和JavaScript实现在线语音识别系统 如何使用WebSocket和JavaScript实现在线语音识别系统 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

WebSocket与JavaScript:实现实时监控系统的关键技术 WebSocket与JavaScript:实现实时监控系统的关键技术 Dec 17, 2023 pm 05:30 PM

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何利用JavaScript和WebSocket实现实时在线点餐系统 如何利用JavaScript和WebSocket实现实时在线点餐系统 Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

如何使用WebSocket和JavaScript实现在线预约系统 如何使用WebSocket和JavaScript实现在线预约系统 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

JavaScript和WebSocket:打造高效的实时天气预报系统 JavaScript和WebSocket:打造高效的实时天气预报系统 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的实时天气预报系统引言:如今,天气预报的准确性对于日常生活以及决策制定具有重要意义。随着技术的发展,我们可以通过实时获取天气数据来提供更准确可靠的天气预报。在本文中,我们将学习如何使用JavaScript和WebSocket技术,来构建一个高效的实时天气预报系统。本文将通过具体的代码示例来展示实现的过程。We

简易JavaScript教程:获取HTTP状态码的方法 简易JavaScript教程:获取HTTP状态码的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

javascript中如何使用insertBefore javascript中如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用于在DOM树中插入一个新的节点。这个方法需要两个参数:要插入的新节点和参考节点(即新节点将要被插入的位置的节点)。

JavaScript和WebSocket:打造高效的实时图像处理系统 JavaScript和WebSocket:打造高效的实时图像处理系统 Dec 17, 2023 am 08:41 AM

JavaScript是一种广泛应用于Web开发的编程语言,而WebSocket则是一种用于实时通信的网络协议。结合二者的强大功能,我们可以打造一个高效的实时图像处理系统。本文将介绍如何利用JavaScript和WebSocket来实现这个系统,并提供具体的代码示例。首先,我们需要明确实时图像处理系统的需求和目标。假设我们有一个摄像头设备,可以采集实时的图像数

See all articles