JavaScript的时区处理
2017-02-15 本文已影响6288人
张圣兰
几个概念
- UTC时间为标准时间, GMT时间比UTC时间有更多误差。
- 北京时间比UTC时间快8个小时。
数据库时间(Postgres)
数据库可以储存有时区的时间(timestamp with timezone)和无时区的时间(timestamp without timezone), 多数情况下使用后者。
若create
或update
给的时间参数有时区表示, 则数据库会依据定义的数据类型自动转化时区, 若没给出时区, 则默认视为标准时间。
- 参数无时区, 数据库有时区
- 参数:
2017-02-12 16:00:00
- 存入后:
2017-02-12 16:00:00+00
- 参数:
- 参数有时区, 数据库有时区
- 参数:
2017-02-12 16:00:00+08
- 存入后:
2017-02-12 16:00:00+08
- 参数:
- 参数无时区, 数据库无时区
- 参数:
2017-02-12 16:00:00
- 存入后:
2017-02-12 16:00:00
- 参数:
- 参数有时区, 数据库有时区
- 参数:
2017-02-12 16:00:00+08
- 存入后:
2017-02-13 00:00:00+00
- 参数:
JavaScript的基本转化方式
JavaScript的new Date()
函数生成的是本地时间。
JavaScript | Result |
---|---|
new Date |
Mon Feb 13 2017 00:00:00 GMT+0800 (CST) |
toDateString |
Mon Feb 13 2017 |
toGMTString |
Sun, 12 Feb 2017 16:00:00 GMT |
toISOString |
2017-02-12T16:00:00.000Z |
toJSON |
2017-02-12T16:00:00.000Z |
toLocaleDateString |
2/13/2017 |
toLocaleTimeString |
12:00:00 AM |
toLocaleString |
2/13/2017, 12:00:00 AM |
toString |
Mon Feb 13 2017 00:00:00 GMT+0800 (CST) |
toTimeString |
00:00:00 GMT+0800 (CST) |
toUTCString |
Sun, 12 Feb 2017 16:00:00 GMT |
UTC时间转本地时间
var toLocal = function(date) {
// 确保date 最终为Date object
date = new Date(date);
var local = date.toLocaleString('en-US', {
hour12: false,
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
return local;
};
- 通过
toLocaleString()
方法转化时区, 可以自定义显示样式。
本地时间转UTC时间
总体转化
var toUTC = function(date) {
// 确保date 最终为Date object
date = new Date(date);
// 加入"+08"来标示对应的时区
var utc = date.toISOString().replace(/Z/, "+00");
return utc;
};
提取日期数据
- 获取年 :
var y = date.getUTCFullYear();
- 获取月 :
var m = date.getUTCMonth() ;
- 获取日 :
var d = date.getUTCDate();
- 获取小时:
var h = date.getUTCHours();
- 获取分钟:
var M = date.getUTCMinutes();
- 获取秒钟:
var s = date.getUTCSeconds();