我为每个Couch数据库中的每个文档保存UTC时间戳。
我想根据一年中的特定月份查询和过滤那些文档。为此,我使用以下地图功能创建了一个视图:

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


我用以下示例查询此视图:?key = [“ 1edd367d08770ea34586dbe6dc03ea2c”,3,2013],只要UTC和本地时间在同一月份,它就可以很好地工作。

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

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

最佳答案

我要问的是如何确保这样的查询返回一个月的所有文档,而该月是由客户本地时间而不是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/

10-16 13:39