1

我的字段date( varchar datatype) 采用自定义日期格式,它是dd-mm-yyyy.

例子 :01-01-2016

我想从数据库字段中获取特定日期之间的数据date。假设输入数据存储在变量中:startDate& endDate

我试过这个查询,但结果很奇怪。

$query = DB::table('test')->whereBetween('date', array($startDate, $endDate))->get();

我认为它失败了,因为我使用了自定义date格式。

如何解决?


@更新

假设我有date这样的

29-12-2015
29-12-2015   
29-12-2015
30-12-2015
29-12-2015
01-01-2016
06-01-2016

我设置$startDate$endDate喜欢这个

$startDate = "01-12-2015";
$endDate   = "01-01-2016";

这个脚本甚至没有得到任何结果

$query = DB::table('test')->whereBetween('date', array($startDate, $endDate))->get();

但如果我使用

$startDate = "01-12-2015";
$endDate   = "31-12-2015";

我得到所有数据......这是错误的结果,因为2016 data不应该在范围内......它有点像没有过滤

4

2 回答 2

2

因为你date datatype是 varchar 你可以尝试str_to_date function在 mysql 中使用,然后在使用$starDate$endDate变量之前先转换它的格式。

示例代码是这样的。

$startDate = date("Y-m-d", strtotime("01-12-2015"));
$endDate   = date("Y-m-d", strtotime("31-12-2015"));

$query = DB::table('test')->whereBetween("str_to_date(date, '%d-%m-%Y')", array($startDate, $endDate))->get();

希望有帮助。

于 2016-01-12T07:23:29.993 回答
1

格式应该不是问题;除非您发布的数据与数据库保存的格式不同。确保date数据库中字段的格式与您存储在$startDate,中的格式匹配$endDate

我也将通过采取稍微不同的方法来解决这个问题。这可以成为一个模型函数,调用它getDataBetweenDates()。每次您需要查询数据库,以检索指定日期范围内的数据时,您都可以从控制器调用此函数:

  • 模型

public function getDataBetweenDates($startDate, $endDate) {
    $range = [$startDate, $endDate];
    return $this
        ->whereBetween('date', $range)
        ->get();
}
  • 控制器

$startDate = Input::get('start_date'); 
$endDate = Input::get('end_date'); 

$model = new Model; // use your model name; 
$data = $model->getDataBetweenDates($startDate, $endDate);
于 2016-01-12T01:07:54.673 回答