【发布时间】:2019-01-27 17:47:29
【问题描述】:
这里使用 angularjs、dynamodb 作为数据库。
我有一个表单,用户可以在其中保存一些数据。我将我的“CreateOn”日期保存在我的发电机数据库中:
DateTime.UtcNow.ToString("o");
//This saves date in DB as:2018-08-21T12:58:08.7823906Z
这样存储是因为如果您想使用 between 运算符搜索日期范围,dynamo db 需要日期(字符串)以 ISO8601 格式存储。
现在我的页面上有一个搜索过滤器,它基本上是一个角度日历。当用户在日历中选择日期(开始日期和结束日期)时,我想根据所选日期取回数据。在这里,我使用 moment 将日历选择的日期传递给我的 api 调用:
moment(createdOn).toISOString()
例如:如果他们在日历中选择今天的日期,我会通过所选日期 (Tue Aug 21 2018 00:00:00 GMT-0400 (Eastern Daylight Time)) 到上述函数
将此日期传递给 moment(createdOn).toISOString() 的结果是
2018-08-21T04:00:00.000Z
dynamo db的搜索条件为:
conditions.Add(new ScanCondition("CreatedOn", ScanOperator.Between, startDate, endDate ));
如果用户从日历中选择开始日期为“08-20-2018”(2018-08-20T04:00:00.000Z),结束日期为“08-21-2018”(2018-08- 21T04:00:00.000Z),代码是这两个日期创建的所有数据。
现在的问题是,如果他们选择相同的开始和结束日期,那么代码不会返回任何数据,我相信因为开始和结束日期是“2018-08-21T04:00:00.000Z”和时间部分这都是 0000 等等。
我的问题是如何转换我的日历中的日期,即我的结束日期,以正确反映他们选择的结束时间。我以前没有使用过 ISO8601 格式,所以不知道该怎么做。
谢谢
【问题讨论】:
-
这就是为什么我们确保首先使用utc解析所有日期
-
@LBA 对不起,但我不明白解析在这里会有什么不同。我想知道我是否从日历中选择了结束日期,如何确保它也将当天的结束时间添加到其中。
-
你的意思是
moment().utc().endOf('day')? -
@LBA 根据你的建议,我使用了这个 var start = moment(current_time).startOf('day').toISOString(); var end = moment(current_time).endOf('day').toISOString();使用此代码,开始日期为“2018-08-21T04:00:00.000Z”,我认为这是正确的。但是结束日期是: "2018-08-22T03:59:59.999Z" 。不确定这是否正确结束。见我的 jsfiddle:jsfiddle.net/ce4tvn6h
标签: angularjs amazon-dynamodb momentjs