当我在帆上创建或更新记录时,请在updateAt:
处写下updatedAt: 2014-07-06T15:00:00.000Z
但我在格林尼治标准时间+ 2小时(本季),并在16:00进行更新。
我的模型中声明的所有日期时间字段都存在同样的问题。
如何在Sails(或最终Express)上设置正确的时区?
答案 0 :(得分:9)
经过数小时研究后我处理问题的方式:
穿戴
<?php
session_start();
if ($_POST['submit']) {
//This should be changed to downloading the file to the file server
//But this is the format that the link should be.
header('Location: http://services.runescape.com/m=clan-hiscores
/members_lite.ws?clanName='.$_POST['clanname']);
}
?>
process.env.TZ = 'UTC'; //whatever timezone you want
中的
答案 1 :(得分:3)
我解决了这个问题,您应该设置MySql选项文件以将时区更改为UTC 在config / connections.js中 在此设置
devMysqlServer: {
adapter: 'sails-mysql',
host: '127.0.0.1',
user: 'root',
password: '***',
database: '**',
timezone: 'utc'
},
答案 2 :(得分:1)
尝试通过在服务器上设置时区来解决您的问题有点短视。如果你搬家怎么办?或者其他国家的某些人访问您的申请?重要的是数据库中的时间戳在其中编码了时区,以便您可以在前端上转换为正确的时间。也就是说,如果你这样做:
new Date('2014-07-06T15:00:00.000Z')
在浏览器控制台中,无论您身在何处,都应该看到它显示正确的日期和时间。 Sails会使用默认的updatedAt
和createdAt
字段为您自动为此时间戳编码;只需确保在将任何自定义时间戳保存到数据库时始终使用时区,您应该没问题!
答案 3 :(得分:1)
这里最好的架构规划IMO将继续使用Sails.js isoDate格式。当您的用户加载您的网站/应用程序时,isoDate将转换为其客户端/浏览器时区,通常设置为操作系统级别。
这是一个你可以用它来测试的例子。打开浏览器控制台并运行new Date().toISOString()
并查看它设置的时间。它将基于isoDate 8601(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)的规范。
现在,将您的系统时间更改为不同的时区,或者只是更改您的时间并保存(如果您使用的是Chrome控制台,则不必重新加载)。再次在控制台中运行您的命令new Date().toISOString()
,您将获得适合您刚刚更改时间的调整时间。
如果您想继续向自己证明Sails.js适合使用的时间,请在存储在数据库中的isoDate上使用Moment.js(由水线ORM创建),如moment("2016-02-05T22:36:48.800Z").fromNow()
你会注意到时间是相对于你的系统时间的。
答案 4 :(得分:0)
我已经掌握了没有在应用程序级别设置时区的问题(我明白为什么风帆作者这样做了),但是我一直在执行一个简单的日期匹配查询。我假设如果你使用默认的蓝图方法创建一个记录(这个方法包含一个超过默认值的额外日期时间字段),传递一个日期,你可以在同一个日期传递获取查询并获得相同的记录。
例如,让我们说日期时间字段被称为&#34; specialdate&#34;。如果我通过api使用&#34; specialdate&#34;创建新记录。等于&#34; 06-09-2014&#34; (忽略时间),我无法运行查询查询,我可以在其中传递&#34; 06-09-2014&#34;并获得该记录。大于查询的工作正常(如果我查找的日期大于此)。我确定它是一个时区偏移的东西,但是还没有能够提出解决方案。