在Yii中存储日期和日期范围的最佳方式

时间:2014-03-17 09:21:22

标签: date yii date-range

我有一个旧应用程序,让用户插入日期,以便每个人都知道他们何时会去度假。到目前为止,他们有文本字段,他们可以根据需要输入文本(" 1.1,5.1,21.1-25.1")或者他们想要的任何内容,因为它是简单的文本字段。 这种输入排除了过滤或搜索的任何机会。 我不久前开始玩Yii,这是我第一次使用多个日期和日期范围。

我需要的是如何将这些日期/日期范围存储到数据库中的建议?我知道Yii有它存储单个日期的方式(我以前做过),但我不知道它是否适用于日期范围和/或多个日期。

如果你们中间有任何人遇到过类似的问题,我会就如何存储这些日期以及你们使用的扩展程序等提出建议。

当然我想用日期选择器和搜索功能使用户友好,但我一步一步地采取它。一旦我正确存储,搜索和过滤不会是巨大的痛苦。

1 个答案:

答案 0 :(得分:0)

What i need is advice on how to store those dates / date ranges into database? 

那取决于你想如何使用日期范围。这取决于搜索的标准。因为如果你不需要定期搜索日期,那么可能会有一些肮脏的方法来完成这项任务 但是如果你需要经常搜索它,那么你应该在数据库表中为开始和结束日期制作显式列。通过制作显式表,你可以轻松地在日期范围内搜索。例如,您可以运行像

这样的SQL查询
SELECT * FROM yourtable WHERE startDate<="some date" AND endDate>="some date"

注意: 您必须注意PHP代码中日期的格式和数据库中日期的格式 如果您只是为了计算目的而需要使用日期范围,那么您可以使用简单的PHP代码来实现它。

$startDate = '2014-02-20';

$endDate = '2014-03-20';

$inputDate = '2014-02-28';
$start = strtotime($startDate);
  $end = strtotime($endDate);
  $input = strtotime($inputDate);
bool $isBetween=(($user >= $start) && ($user <= $end));

Yii方式: 实际上,通过一个窗口没有yii方式处理日期范围。实际上每个框架都提供对所有属性的基本独立访问。这并不意味着你无法改变行为。是的,你可以,但你需要更多的代码。
有一些扩展,你可能会发现在将来有用 Adding a date range search for CGridView the easy way
How to filter CGridView with From Date and To Date datepicker