存储日期时间修改+格式



我有一个要求,用户希望能够保存";日期修饰符";字符串到数据库,然后将其与应用程序中的其他日期一起使用。

例如-

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')

有没有更好的方法来解决这个问题,因为这看起来可能会很快变得非常混乱?

用户可能会对这样的选项有无尽的奇怪请求。例如:";下一个闰年二月的最后一天;。好吧,我可能做得太过火了,但这些日期可以是相对的,绝对的,也可以是混合的。预测用户想要什么总是很困难的。你需要灵活。

在这种情况下,我通常甚至不会试图找到一个可爱的解决方案,因为总有一天你必须放弃它,重新开始。我的解决方案?简单的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; 
}

(代码只是一个例子,并不意味着正确(

通过这种方式,你可以很容易地融入任何可能出现的奇怪请求,并且你可以保留现有的工作。这不是最短的解决方案,也不是最聪明的,但却是最实用的。

最新更新