1
Lycnir 2014-11-20 10:30:29 +08:00 1
你可以参考 dateutil 库
|
2
xiaoyong OP @Lycnir 你好,看了下你说的dateutil库,但是还没有解决。具体点说:例如选择“每周举行”一个开始时间和一个结束时间,中间又选择了“周三”“周五”两天,如果查询条件是“最近3天”怎么存储前面选择日期和时间才可以从数据库查询出来。目前使用的mysql。
|
3
rrfeng 2014-11-20 11:45:05 +08:00
『最近』功能我觉得是计算好了日期存储的。
比如存储最近100 天的所有活动,然后查询。肯定不是直接按原始条件计算,多费劲啊 |
4
xiaoyong OP @rrfeng 每一个活动应该都是单独存储的原始的时间戳+其他条件。否则,计算时无法完成。而且查询条件有多种“明天”“最近3天”“一周内”“周末”等等多种,都需要有自己的计算方法。
|
5
shakoon 2014-11-20 12:57:15 +08:00
最简单的办法,在保存时直接计算出该活动的每一个具体日期,存入另一个字段,列表展示所有活动时用这个新字段来做筛选条件
|
6
rrfeng 2014-11-20 12:59:21 +08:00
@xiaoyong
如果我做的话,会采用这么一种方案。 1. 存储创建时间和时间定义规则。 2. 单独一个表存储『100 天内的所有活动』。在活动创建时,和每天定时更新。根据所有活动的 1 计算结果并储存。 这样的好处是,查询时非常快,不需要重复计算。 比如我查了 3 天内,再查 5 天内,无论何种算法你都需要遍历 2 次活动并计算活动时间。 浅见,莫喷。 |
7
Lycnir 2014-11-20 15:50:09 +08:00 1
@xiaoyong
表设计的话: 1个活动有起始时间和结束时间,建议存储时间戳 1. 比如我建了个活动: 20号~25号,周三周五8:00~10:00,那么你可以先用dateutil.rrule列出这期间的周三周五的日期只有1个datetime.datetime(2014,11,21,0,0,0),然后加上时间存储. 2. 然后查询的"最近3天",你可能需要获取3天前0点的时间戳和3天后0点的时间戳,符合相应的条件列出来应该就行了 |