我有一个要求,用户希望能够将“日期修饰符”字符串保存到数据库中,然后将其与应用程序中的其他日期一起使用。
例如-
id name date_modifier
1 Add 1 Year +1 year
2 Last Day Of Month last day of this month
// simplified; using DateTime
echo $date->modify($date_modifier);
// today = 02/03/2022
// Add 1 Year = 02/03/2023
// Last day of month = 31/03/2023本质上,我是将一个日期修饰符字符串传递给一个DateTime对象来修改它。
这似乎还不错,但我遇到了一些问题-
例如,有些要求是5th of {whatever date is supplied} --这不起作用/我不知道实现这一目标的日期修饰符是什么样子。
$date = '02/03/2022';
$date->modify($fifth_of_month);
// outputs 05/03/2022我的下一个想法是也存储date_format,这样我就不会modify这个日期了;但是我会把它格式化为$date->format('Y-m-05')
是否有更好的方法来解决这个问题,因为它看起来会很快变得非常混乱?
发布于 2022-03-02 11:57:43
用户可以有无休止的奇怪的请求这样的一个选项。例如:“下一个闰年2月的最后一天”。好的,我可能做得太过了,但是这些日期可以是相对的,绝对的,或者是混合的。预测用户想要什么总是很困难的。你得灵活点。
在这种情况下,我甚至不尝试找到一个可爱的解决方案,因为总有一天你必须放弃它,重新开始。我的解决方案?简单的switch
switch ($wantedModification) {
case 'Add 1 year' : $newDate = $date->modify('+1 year');
break;
case 'Last Day Of Month' : ....
break;
case '5th of next Month' : ....
break;
default : alert('Sorry, I forgot to implement this choice...');
break;
}(代码只是一个例子,并不意味着正确)
通过这种方式,您可以轻松地合并任何可能出现的奇怪请求,并保留现有的工作。这不是最短的解决方案,也不是最聪明的,但它是最实际的。
https://stackoverflow.com/questions/71322066
复制相似问题