JavaScript的时区处理

几个概念

  1. UTC时间为标准时间, GMT时间比UTC时间有更多误差。
  2. 北京时间比UTC时间快8个小时。

数据库时间(Postgres)

数据库可以储存有时区的时间(timestamp with timezone)和无时区的时间(timestamp without timezone), 多数情况下使用后者。
createupdate给的时间参数有时区表示, 则数据库会依据定义的数据类型自动转化时区, 若没给出时区, 则默认视为标准时间。

  • 参数无时区, 数据库有时区
    • 参数: 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()函数生成的是本地时间。

JavaScriptResult
new DateMon Feb 13 2017 00:00:00 GMT+0800 (CST)
toDateStringMon Feb 13 2017
toGMTStringSun, 12 Feb 2017 16:00:00 GMT
toISOString2017-02-12T16:00:00.000Z
toJSON2017-02-12T16:00:00.000Z
toLocaleDateString2/13/2017
toLocaleTimeString12:00:00 AM
toLocaleString2/13/2017, 12:00:00 AM
toStringMon Feb 13 2017 00:00:00 GMT+0800 (CST)
toTimeString00:00:00 GMT+0800 (CST)
toUTCStringSun, 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;
};
  1. 通过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();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值