Pau*_*ero 1 php laravel laravel-5
用户添加收入或支出。如果他将其归类为经常性交易,他会从包含(每周、每两周、每月)的频率下拉列表中进行选择。用户还输入开始日期。我想获取从用户提供的日期开始选择的频率的日期。
例如,用户输入 06-13-2016 和每周(当前日期:06-28-2016),我想获取日期 06-20-2016 和 06-27-2016。
HTML 下拉菜单
<select name="frequency_id">
<option value="1">weekly</option>
<option value="2">fortnightly</option>
<option value="3">monthly</option>
</select>
Run Code Online (Sandbox Code Playgroud)
控制器
public function getDates($frequency, $start_date) {
//$start_date is string e.g 06-23-2016
//$frequency is also string e.g weekly, fortnightly, monthly
...
...
return $dates; //array returned
}
Run Code Online (Sandbox Code Playgroud)
如果我将字符串日期转换为 DateTime 对象就可以了,只要我得到日期即可。
我想获取以日期数组或类似形式返回的日期。
我不知道如何继续。请帮忙。
您将需要使用Carbon来完成此任务。它已经包含在 Laravel 中。:)
让我们在控制器外部编写一个助手来完成此任务:
app/Helpers/DateHelper.php(只需创建该文件)
<?php
namespace App\Helpers;
use Carbon\Carbon;
class DateHelper
{
public static function next_dates($start_date, $frequency)
{
$dates = [];
$start_date = Carbon::createFromFormat('m-d-Y', $start_date);
$end_date = Carbon::today();
while ($start_date->lte($end_date)) {
switch ($frequency) {
case 'weekly':
$start_date = $start_date->addWeek();
break;
case 'fortnightly':
$start_date = $start_date->addWeeks(2);
break;
case 'monthly':
$start_date = $start_date->addMonth();
break;
}
if ($start_date->lte($end_date)) {
$dates[] = $start_date->format('m-d-Y');
}
}
return $dates;
}
}
Run Code Online (Sandbox Code Playgroud)
在你的控制器中,只需使用助手:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use App\Helpers\DateHelper;
class YourController extends Controller
{
public function index(Request $request)
{
$dates = DateHelper::next_dates(
$request->input('start_date'),
$request->input('frequency')
);
return view('your-view')->with(compact('dates'));
}
}
Run Code Online (Sandbox Code Playgroud)