ISO日期格式标准,浏览器到服务器到mysql中的时区
时区简单理解
https://zh.wikipedia.org/wiki/%E6%97%B6%E5%8C%BA
上面的链接是时区的wiki说明,下面说说我记住的部分:
GMT时区是格林威治标准时间,我把它理解为 “真实时间”
UTC时区是根据GMT得来的“世界标准时间”,它的时间和GMT是相同的
CST可以指下列的时区:
澳洲中部时间,Central Standard Time (Australia)
中部标准时区(北美洲),Central Standard Time (North America)
北京时间,China Standard Time
古巴标准时间,Cuba Standard Time,参见北美东部时区
其中我们所在的时区背景时间 CST=UTC+8小时,也就是说,真实时间是0点的时候,背景时间是8点
ISO_8601日期格式标准
https://zh.wikipedia.org/wiki/ISO_8601
上面是日期格式标准的wiki
当前的UTC时间是2016-01-07T01:58Z,其中Z是4位数字格式的时间偏移量,不写的时候默认不偏移。
其中,字母T代表使用UTC时间,字母Z代表时间偏移量,实际写法中字母Z应该被偏移量替换,例如 "2017-1-7T10:21+0800"或者"2017-1-7T10:21-0800",字母Z被+0800和-0800替换了。
在浏览器中直接new一个date对象,因为我们处于UTC+0800的时区,所以控制台给我们打印出来的时间是GMT+0800的时间
2016-01-07T00:00 代表UTC时区1月7日0时0分(在控制台中显示UTC+0800时区为8时0分)
2016-01-07T00:00 0800 代表UTC+0800时区1月7日0时0分,2016-01-07T00:00 -0800 代表UTC-0800时区1月7日0时0分,在控制台中显示分别如下
通过日期字符串new一个Date对象,输入的时间字符串是2016-1-7 10:21,没有带ISO标准的“T”字母,因此浏览器认为我们想输入的是当地时间
HTML5 input标签datetime属性
下面问题来了,我要在页面上输入一个时间,存入数据库,上面说了那么多时区,那么用户在页面上输入的时间应该是哪个时区的呢,传到server,存入db的应该又是哪个时区的呢?
经测试
<input type="datetime" /> chrome上是不支持的
<input type="datetime-local" /> chrome支持
Google了一下据说是因为datetime输入框输入的是本地时区,考虑到时区的问题chrome没有支持此输入类型,会降级为text类型
datetime-local输入类型chrome是支持的,获取的value格式是:
"2016-1-7T10:21"
如上面所述,这个时间是标准UTC时间,这种时间从前端到后台到存入db,都是不会发生错误的。
但是对用户来说,他填写表单的时候想的时间肯定是他所在位置的本地时间,比如我输入"2016-1-7 10:21",我真实想输入的时间是"2016-1-7T10:21+0800",而不是"2016-1-7T10:21"。
为了支持这种情况,我需要把"2016-1-7T10:21"转换为用户真实想要的当地时间"2016-1-7 10:21",于是"2016-1-7 10:21".replace("T"," "),它实际代表的真实时间(UTC时间)是"2016-1-7T10:21+0800"
这样在前端是没问题了,但是传到后端之后,这样的非ISO标准时间是没有携带时区信息的,服务器收到之后会将这个时间安装服务器所在时区来处理,处理之后所代表的真实时间就和用户输入的真实时间不同了。所以我们在前端得把时间转换为ISO标准时间格式再传给服务器,这样服务器就能明白用户输入的真正的时间了,另一种方法,也可以把时间用毫秒数表示,传到后端,不过这种方式可读性不太好。
// 1.将字面时间转化为本地时间 2.将本地时间转换为真实GMT时间传入后台
function getRealGMT(datetime){
datetime=datetime.replace("T"," ");
var temp=new Date(datetime);
var realGMT=temp.getTime()+temp.getTimezoneOffset()*60000;
return new Date(realGMT).format("yyyy-MM-ddThh:mm");
}
mysql时区
ISO日期格式标准,浏览器到服务器到mysql中的时区的更多相关文章
- 日期格式操作,在oracle和mysql中的实现
oracle add_months(日期格式值 , 整数n) 当整数n=12时,代表一年,向后推迟一年,若n=-12代表回退一年 如 to_char(add_months(to_date('2018 ...
- 最近开发的项目,遇到用户上传excel文件并导入数据到系统这个需求,而有excel中有的单元格是日期格式,本文介绍怎么从excel中读取日期格式的数据。
可以先判断单元格的类型,有的日期是字符串存储的,有的是按日期存储的(单元格按数字解析),代码如下: Cell cell = row.getCell(); Date date = null; if (c ...
- EXCEL日期格式要双击一下单元格才变正确格式
今天遇到标题问题,问度娘后看到一个大神的解答,特此记录整理. 步骤1:在excel中把文本格式日期改为想要的日期格式 步骤2:在旁边空格中输入1,并设置成日期格式,变成1900/1/1: 步骤3:复制 ...
- Nullable<System.DateTime>日期格式转换 (转载)
一.问题 1.html页面中时间显示出错,数据库中时间是正确的. 原因:没有把DateTime转成String类型. 2. 在C#中,发现不能直接使用ToString("yyyy-MM-d ...
- 机器学习入门-随机森林温度预测的案例 1.datetime.datetime.datetime(将字符串转为为日期格式) 2.pd.get_dummies(将文本标签转换为one-hot编码) 3.rf.feature_importances_(研究样本特征的重要性) 4.fig.autofmt_xdate(rotation=60) 对标签进行翻转
在这个案例中: 1. datetime.datetime.strptime(data, '%Y-%m-%d') # 由字符串格式转换为日期格式 2. pd.get_dummies(features) ...
- C# MVC 用户登录状态判断 【C#】list 去重(转载) js 日期格式转换(转载) C#日期转换(转载) Nullable<System.DateTime>日期格式转换 (转载) Asp.Net MVC中Action跳转(转载)
C# MVC 用户登录状态判断 来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类Authenticati ...
- js 将long日期格式 转换为标准日期格式方法
我们经常在操作的时候会发现从后台传递到view层的json中datetime类型变成了long型,当然你也可以从后台先转为string类型,但是如果是从和数据库对应的object中封装的话,就不能再去 ...
- 通过VBA,当在EXCEL单元格中输入任意的日期格式时,都能自动转换为指定的标准格式的日期值
在日常录入EXCEL表格的单元格里 ,我们输入一些一般性的日期内容,如:2017-10-17 或 2017/10/17时,EXCEL会自动识别为日期并按单元格设计格式显示,单元格中存储的值也是日期格式 ...
- SQL 将非标准日期格式转换成标准格式,进行条件判断
a.JLDate为非标准日期格式: 例: 2011-8-28 0:00:000011-8-28 0:00:000111-8-4 0:00:00 select CONVERT(varchar(50),C ...
随机推荐
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- HTTP协议系列(1)
一.为什么学习Http协议 首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...
- 使用 Nodejs 搭建简单的Web服务器
使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...
- 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录
ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...
- C#多线程之线程同步篇3
在上一篇C#多线程之线程同步篇2中,我们主要学习了AutoResetEvent构造.ManualResetEventSlim构造和CountdownEvent构造,在这一篇中,我们将学习Barrier ...
- C#各种同步方法 lock, Monitor,Mutex, Semaphore, Interlocked, ReaderWriterLock,AutoResetEvent, ManualResetEvent
看下组织结构: System.Object System.MarshalByRefObject System.Threading.WaitHandle System.Threading.Mutex S ...
- BPM配置故事之案例1-配置简单流程
某天,Boss找到了信息部工程师小明. Boss:咱们新上了H3 BPM,你研究研究把现在的采购申请流程加上去吧,这是采购申请单. 小明:好嘞 采购申请单 小明回去后拿着表单想了想,开始着手配置. 他 ...
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
- 敏捷转型历程 - Sprint3 一团糟的演示会
我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...
- 元素绝对居中终极办法兼容IE8
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...