javascript - CouchDB 按月和年过滤 UTC 日期

标签 javascript date couchdb

我为我的一个 Couch 数据库中的每个文档保存了一个 UTC 时间戳。 我想根据一年中的特定月份查询和过滤这些文档。为此,我创建了一个具有以下 map 功能的 View :

function(doc) {
    var date = new Date(doc.activity.date);
    emit([doc.user, date.getUTCMonth(), date.getUTCFullYear()], doc.activity.distance);
}

我用例如 ?key=["1edd367d08770ea34586dbe6dc03ea2c",3,2013] 查询此 View ,只要 UTC 和本地时间在同一个月,它就可以正常工作。

我要问的是如何确保像这样的查询返回一个月内的所有文档,其中月份由客户本地时间而不是 UTC 定义?

客户端是基于 JavaScript 的 Web 客户端,但查询是通过后端的 NodeJS API 处理的。

最佳答案

What I am asking is how can I ensure that a query like this returns all documents of a month, where the month is defined by the clients local time and not UTC?

找到客户月份的开始和客户下个月的开始。这些将形成要查询的范围。例如:

var now = new Date();
var start = new Date(now.getFullYear(), now.getMonth(), 1);
var end = new Date(now.getFullYear(), now.getMonth() + 1, 1);

然后您需要确定将其作为 UTC 传递给数据库的最佳方式。例如:

var startUTC = start.toISOString();
var endUTC = end.toISOString();

(我不确定 CouchDB 的具体细节,因此请根据需要进行调整。)

然后您需要在数据库中执行范围查询。您不能只匹配年份和月份,因为您的数据采用 UTC 格式,并且边缘不一定与您客户的时区对齐。

我不熟悉 Couch 的语法,但在 SQL 中它会是这样的:

... WHERE activityDate >= startUTC AND activityDate < endUTC

由于我们将 月的开始作为结束日期,请确保执行独占 <而不是包容性的 <=手术。只有开始日期应该包括在内。

关于javascript - CouchDB 按月和年过滤 UTC 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18743557/

相关文章:

javascript - NAVLINK 的 React Route 收到非 bool 属性的 TRUE

node.js - NodeJS + CouchDB : Migrate from HTTP to HTTPS

couchdb - 出于报告目的“展平”文档层次结构

node.js - 让 CouchDB 与 Node.js 一起使用

javascript - 获取对象中具有给定词的所有字段并转换这些字段的所有值

javascript - CurveyCorners/CSS3PIE 替代方案和故障

javascript - 查询 forEach 中的其他集合

javascript - 如何保留 html 内容历史记录以使后退按钮起作用?

php - 获取codeigniter事件记录中用户的上个月和当月记录

java - 不使用 java.util.Date 的 Java 中的纳秒级时间