我想我被这个问题困住了,所以我希望你能给我一些如何解决这个任务的想法。
我正在开发一个应用程序,它可以让您大致了解您的定期付款(我知道,这些东西已经存在,这只是一个副项目)和您的费用。
API 快要完成了,但我在这部分挣扎:我需要知道在给定的时间跨度内是否需要定期付款。
重复事件(合同)包含其他字段 startDate、endDate、intervalType(枚举 [每周、每月、每季度、每半年、每年])
目前我有这个作为我的学说查询:
return $this->createQueryBuilder('e')
->andWhere('e.startDate >= :start')
->andWhere('e.endDate <= :end')
->andWhere('e.user = :user')
->setParameter('start', $start)
->setParameter('end', $end)
->setParameter('user', $user)
->getQuery()
->getResult();
其中参数 start 和 end 是间隔帧。
但是我如何检查合同是否在选定框架内到期以及多久到期?
Afaik 这只能通过迭代查询结果并检查合同是否与时间范围相交并注意在此期间发生的频率和时间来实现。
但我不知道我怎么能做到这一点。
示例数据:
[name, intervalType, startDate, endDate, amount]
rent, monthly, 2019-01-01, 2020-10-11, -500
utility, monthly, 2019-01-01, 2020-10-11, -150
salary, monthly, 2019-01-01, 2020-10-11, 1700
investment, biannually, 2019-02-10, null , 2500
food, weekly, 2019-01-01, null , -50
如果我有这个月的时间表(2019-05-01 - 2019-05-31),我会得到这些合同:
rent 2019-05-01
utility 2019-05-01
salary 2019-05-01
food 2019-05-01
food 2019-05-08
food 2019-05-15
food 2019-05-22
food 2019-05-29
如果我选择以下 2 个月(2019-07-01 - 2019-08-31),我会得到这个:
rent 2019-07-01
rent 2019-08-01
utility 2019-07-01
utility 2019-08-01
salary 2019-07-01
salary 2019-08-01
food 2019-07-01
food 2019-07-08
food 2019-07-15
food 2019-07-22
food 2019-07-29
food 2019-08-01
food 2019-08-08
food 2019-08-15
food 2019-08-22
food 2019-08-29
investment 2019-08-01
DateTime 和 DateInterval 可以实现吗?
慕村9548890