Mysql 如何跨多个时区按日期处理数据分组请求?
下面是一个场景。我在服务器上使用MySQL/NodeJS/Sequelize堆栈,我有一个请求要执行 从请求中检索到的条目从1000到2000个不等,但我不需要完整的条目列表。我希望在条目按条目创建的当天进行分组后,得到条目的摘要,它可以浓缩为一个数组中的大约5-10个对象 如果我在服务器上按天分组,它可能会根据客户端的时区对它们进行不同的分组。如果我将其发送给客户端,那么我必须发送1-2k个条目进行分析,但它将正确地对它们进行分组Mysql 如何跨多个时区按日期处理数据分组请求?,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,下面是一个场景。我在服务器上使用MySQL/NodeJS/Sequelize堆栈,我有一个请求要执行 从请求中检索到的条目从1000到2000个不等,但我不需要完整的条目列表。我希望在条目按条目创建的当天进行分组后,得到条目的摘要,它可以浓缩为一个数组中的大约5-10个对象 如果我在服务器上按天分组,它可能会根据客户端的时区对它们进行不同的分组。如果我将其发送给客户端,那么我必须发送1-2k个条目进行分析,但它将正确地对它们进行分组 您将如何处理这种情况?对所有内容使用UTC时间戳。例如,打开C
您将如何处理这种情况?对所有内容使用UTC时间戳。例如,打开Chrome控制台并输入以下内容:
// Milliseconds since 1/1/1970
new Date().getTime()
1438263135084
// Human friendly without timezone
new Date().toISOString()
"2015-07-30T13:32:15.715Z"
// Human friendly with timezone
new Date().toString()
"Thu Jul 30 2015 09:32:21 GMT-0400 (EDT)"
所有这些都是相同的(时间自1970年1月1日起),只是格式不同而已。使用前两个选项中的任何一个都可以让您发送可以正确解释和格式化的日期,而不考虑时区
有趣的阅读:对所有事情都使用UTC时间戳。例如,打开Chrome控制台并输入以下内容:
// Milliseconds since 1/1/1970
new Date().getTime()
1438263135084
// Human friendly without timezone
new Date().toISOString()
"2015-07-30T13:32:15.715Z"
// Human friendly with timezone
new Date().toString()
"Thu Jul 30 2015 09:32:21 GMT-0400 (EDT)"
所有这些都是相同的(时间自1970年1月1日起),只是格式不同而已。使用前两个选项中的任何一个都可以让您发送可以正确解释和格式化的日期,而不考虑时区
有趣的阅读:也许您可以将日期转换为用户的时区,但这当然需要您知道用户的时区,缓存将更加困难 在sequelize中,它的表达方式如下
sequelize.fn('CONVERT_TZ', sequelize.col('date'), 'UTC', user_tz)
也许您可以将日期转换为用户的时区,但这当然需要您知道用户的时区,而且缓存将更加困难 在sequelize中,它的表达方式如下
sequelize.fn('CONVERT_TZ', sequelize.col('date'), 'UTC', user_tz)
首先,感谢大家对如何处理这个问题的建议。最终,我通过以下操作解决了这个问题 首先,在来自客户端的请求中,我使用矩js方法.utcOffset()获取偏移量值 然后,一旦得到偏移量值,我就将其作为?offset=(这里的值)包含到API查询中 最后,在服务器端,我使用这个值来解释客户端的本地时区偏移量,然后将所有数据分组,并将格式化数据发送回客户端。这导致了更快、更小的响应查询
这是一个相当简单的解决方案—我被窃听了—我花了很长时间才想出它。首先,感谢大家对如何处理此问题的建议。最终,我通过以下操作解决了这个问题 首先,在来自客户端的请求中,我使用矩js方法.utcOffset()获取偏移量值 然后,一旦得到偏移量值,我就将其作为?offset=(这里的值)包含到API查询中 最后,在服务器端,我使用这个值来解释客户端的本地时区偏移量,然后将所有数据分组,并将格式化数据发送回客户端。这导致了更快、更小的响应查询
这是一个相当简单的解决方案—我被窃听了—我花了很长时间才想出它。感谢您的回复!我一直都在使用UTC。问题是,如果我在服务器上根据日期对其进行分组,然后将其发送到客户端,则服务器不知道客户端的日期开始和结束时间,因此无法正确分组日期。这有意义吗?谢谢你的回复!我一直都在使用UTC。问题是,如果我在服务器上根据日期对其进行分组,然后将其发送到客户端,则服务器不知道客户端的日期开始和结束时间,因此无法正确分组日期。这有意义吗?