转自文翼的博客:将本地时间转换为 GMT 时间
在写 RSS 订阅接口的时候,发现最终输出文章的 RSS 时间(GMT时间),在本地上显示的时间和在服务器上显示的时间不一致。 原因是时区不一致,那么在 JavaScript 中,如何将时间转换为统一的时间呢?
1. 查看本地和服务器的时区
通过 date 命令,可以知道:
- 本地的时区是:GMT+0800 (CST)
- 服务器的时区是:GMT+0400 (MSK)
首先,需要明确的一点是,文章上的时间是基于本地时间的,也就是说是 GMT+0800 (CST)。
2. 代码调试
便于理解,我们来举个栗子,例如文章的时间为 2013-11-05 00:00:00, 那么我们最终想要的时间是 2013-11-04 16:00:00 GMT
在本机上
var date = new Date('2013-11-05 00:00:00'); // Tue Nov 05 2013 00:00:00 GMT+0800 (CST)
date.toGMTString(); // Mon, 04 Nov 2013 16:00:00 GMT
在服务器上:
var date = new Date('2013-11-05 00:00:00'); // Tue Nov 05 2013 00:00:00 GMT+0400 (MSK)
date.toGMTString(); // Mon, 04 Nov 2013 20:00:00 GMT
通过对比可以看到,在服务器上也把需要转换的时间当初是本地时间了,所以导致了最终转换的 GMT 时间不一致。
3. 如何解决
Date 对象中有 getTimezoneOffset() 方法,返回的是本地时间与 GMT 时间或 UTC 时间之间相差的分钟数。
var date = new Date('2013-11-05 00:00:00'); // Tue Nov 05 2013 00:00:00 GMT+0400 (MSK)
var localTime = date.getTime() - 8 * 3600000 - date.getTimezoneOffset() * 60000; // 先将文章的时间转换为服务器的本地时间
var newDate = new Date(localTime); // Mon Nov 04 2013 20:00:00 GMT+0400 (MSK)
newDate.toGMTString(); // Mon, 04 Nov 2013 16:00:00 GMT
可以看到,在服务器上也得到我们想要的结果了。
4. 最终成果
function getGMTString(time, localTimezone) {
var date = new Date(time);
return new Date(date.getTime() - localTime * 3600000 -
date.getTimezoneOffset() * 60000).toGMTString();
}
通过上面的方法,我将本地获取到的时间转换为北京时区并传给后台:
//切换成北京时区格式
setTimeEnd(date){
let localTime = date.getTime() -8 * 3600000 - date.getTimezoneOffset() * 60000;
this.props.setEndTimeIos(localTime);
//this.props.BJTime(date);
console.log("465454" + localTime);
}
action中的setEndTimeIos方法,把已经转换成北京时区的时间格式保存在getState()中,方便使用:
/**
* 结束时间
*/
export function setEndTimeIos(date){
let endTimes = date;
return{
type: SET_END_TIME,
data: {endTimes}
}
}
最后通过时间组件,把默认时间与选择后的时间,分别传入:
return (dispatch,getState) => { let date = new Date();
let defaultDate;
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
let hour = date.getHours();
let minute = date.getMinutes();
let second = date.getSeconds();
month = month < 10 ? "0" + month : month;
day = day < 10 ? "0" + day : day;
hour = hour < 10 ? "0" + hour : hour;
minute = minute < 10 ? "0" + minute : minute;
second = second < 10 ? "0" + second : second;
//默认时间
defaultDate = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; let advertisement = advertisementList;
let str = JSON.stringify(advertisement);
let appConfigVersionId = 'iOSTestConfigVersion';
let appId = 'jia-jian-rest'; let AppConfigEntity = {};
let stateOne = getState().applicationState;
let stateTwo = getState().iosAndroidState;
//选择后的时间
let dateStart = stateTwo.startTimes ? stateTwo.startTimes : defaultDate;
let dateEnd = stateTwo.endTimes ? stateTwo.endTimes : defaultDate; AppConfigEntity.configEntityJson = str;
AppConfigEntity.configDescription = stateTwo.configDescription;
AppConfigEntity.startTime = dateStart;
AppConfigEntity.endTime = dateEnd;
AppConfigEntity.appConfigVersionId = appConfigVersionId; Api.addIosImgList(AppConfigEntity,appId,params =>{
dispatch(iosImgCongSetter(params)) ;
});
}
如果获取到的是一个时间戳:1469980800000(北京时区),怎么将它正确转换成 20016-08-24 13:82:26
formatDate(now){
let year = now.getFullYear();
let month = now.getMonth() + 1;
let day = now.getDay();
let hour = now.getHours();
let minute = now.getMinutes();
let second = now.getSeconds(); month = month < 10 ? "0" + month : month;
day = day < 10 ? "0" + day : day;
hour = hour < 10 ? "0" + hour : hour;
minute = minute < 10 ? "0" + minute : minute;
second = second < 10 ? "0" + second : second; return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
} formatTime(cell,row){
let currTime = row.createdOn; //1469980800000
let date = new Date(currTime); let currentTime = this.formatDate(date);
return currentTime; //2016-07-03 20:16:20 console.log("格式化后的日期格式为:" + currentTime);
}
转自文翼的博客:将本地时间转换为 GMT 时间的更多相关文章
- 如何用word文档在博客里发表文章
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- 一文搭建自己博客/文档系统:搭建,自动编译和部署,域名,HTTPS,备案等
本文纯原创,搭建后的博客/文档网站可以参考: Java 全栈知识体系.如需转载请说明原处. 第一部分 - 博客/文档系统的搭建 搭建博客有很多选择,平台性的比如: 知名的CSDN, 博客园, 知乎,简 ...
- 有道云笔记新功能发现——有道云笔记剪报,完美解决不开会员保存csdn博客到本地的问题。
怎么用 方法一:谷歌插件 方法二:http://note.youdao.com/web-clipper-chrome.html 添加到书签 功能: 能够把网页浏览的内容保存到有道云笔记 解决了自己的难 ...
- Java 开源博客 —— Solo 0.6.9 发布时间!
Solo 它是 GitHub 上 Star 的最大数量 Java 博客系统,今天,我们宣布 0.6.9 正式版,欢迎来到下载. 特性 基于标签的文章分类 博客/标签 Atom/RSS.Sitemap ...
- composer本地安装文档 - CSDN博客
1.下载下图2个文件 2.将上图2个文件放到php根目录下与php.exe再同一目录 3.在composer.bat写 4.配置环境变量(将php目录复制到环境变量里) 5.将php.ini配置文件的 ...
- 文顶顶iOS开发博客链接整理及部分项目源代码下载
文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...
- 用Python编写博客导出工具
用Python编写博客导出工具 罗朝辉 (http://kesalin.github.io/) CC 许可,转载请注明出处 写在前面的话 我在 github 上用 octopress 搭建了个人博 ...
- hexo框架-next主题-github搭建个人博客
IT`huhui 的前言录 我在GITHUB的个人站点:http://ithuhui.cn 这里遇到的很多问题都是亲身解决后写的.还有遇到不懂可以邮件M我 在这里要感谢浮生志的博客教程,很多我一开始不 ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
随机推荐
- NOIP水题合集[3/未完待续]
NOIP2008pj传球游戏 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球, ...
- Flex4 vs Flex3: Repeater vs DataGroup
repeaters太老土了!如果你过去使用过它,你会发出这种感概.现在,我们终于要摆脱它了.Repeaters不仅有沉重的组件,而且接合使用很不方便.那么,Flex 4中有什么可以帮助我们吗?Data ...
- Windows Server 2016 预览版下载
下载地址: Window Server 2016 Technical Preview 3 http://care.dlservice.microsoft.com/dl/download/7/3/C/7 ...
- 转: rapidJSON与jsoncpp语法说明
转: http://www.voidcn.com/blog/hudejun007/article/p-1811986.html
- addClass, removeClass, toggleClass(从jquery中抠出来)
<div id="d3" class="cur"></div> var mylibs = (function(){ var rtrim ...
- Frequently Asked Questions - P-thresholds
Source: http://mindhive.mit.edu/book/export/html 1. What is the multiple-comparison problem? What is ...
- Could not load file or assembly 'System.Data.SQLite' or one of its dependencies
试图加载格式不正确的程 异常类型 异常消息Could not load file or assembly 'System.Data.SQLite' or one of its dependencies ...
- python install
Install all dependencies by pip install -r requirements.txt (Run this command from project root)
- 闲扯 『 document.write 』
初春的晚上,闲来无事,聊聊 document.write 方法. document.write 使用方式非常简单,把 "字符串化"(不好意思,这可能是我自己创造的名词)的 html ...
- 文件夹管理工具(MVC+zTree+layer)(附源码)
写在前 之前写了一篇关于 文件夹与文件的操作的文章 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) 把常用的对于文件与文件夹的操作总结了一 ...