Welcome to

快雪Tang

Home / Frontend

MySQL 日期时间以及时区的最佳实践

简单介绍 MySQL的数据类型中,datetime和timestamp是有点区别的两种字段类型。datetime存储的时间与时区无关,timestamp存储的时间总是为UTC。所以说,datetime的时间戳需要应用去解释所在的时区,而timestamp则没有应用依赖性,它是一个精确的戳记无所谓应用处于哪个时区。 最佳策略 实际的场景中,你的insert/update动作会依据服务器系统时区和mysql配置的不同而带来不同的效果:对于系统时区为utc,或者mysql daemon服务配置为utc,则datetime/timestamp中都是存储的utc时间戳。如果不是这样的场景,则提交insert/update时,需要将datetime字段转换为utc时间戳。 当保证了你的db中只有utc时间戳之后,显示时你需要将时间转换到用户时区。 如果使用nodejs moment来包装时间戳,假定通过mysql driver拿到的datetime形如:”2018-03-09T12:37:59.012009Z“的格式,那么简单地: var dt = ‘2018-03-09T12:37:59.012009Z’ console.log(moment(dt).fromNow()); // xxx天前 console.log(moment(dt).format(‘YYYY-MM-DD HH:mm:ssZZ’)); // 2018-03-09 20:37:59+0800 注意到用户时区有浏览器默认值提供,moment()识别到附带时区指示的时间戳UTC值后能够正确地格式化到用户的时区。 测试mysql的时区设定 可以使用SQL语句来测试或者修改mysql的时区设定: SELECT @@global.time_zone, @@session.time_zone; SET GLOBAL time_zone = ‘+08:00’; SET GLOBAL time_zone = ‘Europe/Helsinki’; SET @@global.time_zone = […]

Read More

杂项,笔记

node-sass 总是导致挂起,被封的很死 放弃深入 Sails,挂起MeanIO 放弃 Meteor 保持关注:Koa 切入 Vue Webpack 实作,训练最佳实践 开发一个模板中,已经一段时间了,现在需要整理一下思路,研究一下外层的内容

Read More

Ubuntu 14.0.4/Mac 安装nodejs开发或生产环境 (rvm)

首先来讲,Mac上可以有几种安装nodejs开发环境的方法,然而各种坑我都踩过了,还是建议rvm来安装nodejs,事实上好像我现在并没有遇到什么古怪的问题了,所以这篇文章其实并不能解决初学者的所有问题,顶多只是把一种最佳流程给记录下来罢了。 首先还是上脚本,适用于Ubuntu,Bash环境,同时也适用于Mac的Terminal/iTerm2环境(但需要一点点更改,主要是去掉apt-get相关的指令):

Read More