用户添加收入或费用。如果他将其归类为经常性交易,他会从包含(每周,每两周,每月)的频率下拉中选择。用户还输入开始日期。我想从用户提供的日期开始获取所选频率的日期。
例如,用户输入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>
控制器
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
}
如果我将字符串日期转换为DateTime对象,只要我得到日期就可以了。
我想在一系列日期或类似日期中返回日期。
我不知道如何处理它。请帮忙。
答案 0 :(得分:2)
您希望使用Carbon执行此任务。它已经包含在Laravel中。 :)
让我们在控制器外编写一个帮助程序来执行此任务:
app / Helpers / DateHelper.php (只需创建该文件)
<?php
namespace App\Helpers;
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;
}
}
在您的控制器中,只需使用帮助程序:
<?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'));
}
}
答案 1 :(得分:0)
您可以使用以下内容:
function getDates($frequency, $start_date, $end_date = null) {
//$start_date is string e.g 06-23-2016
//$frequency is also string e.g weekly, fortnightly, monthly
//$end_date is optional string: limit to the dates to be generated. Default = today
// Convert to use slashes, so PHP will interpret in m/d/Y format,
// otherwise it would expect d-m-Y.
$dt = new DateTime(str_replace("-", "/", $start_date));
$dtUntil = new DateTime(str_replace("-", "/", $end_date ? $end_date : date("m-d-Y")));
// conversion table: frequency to date modifier string
$modifiers = [
"weekly" => "+1 week",
"fortnightly" => "+2 weeks",
"monthly" => "+1 month"
];
$modifier = $modifiers[$frequency];
$dt->modify($modifier);
while($dt <= $dtUntil) {
$dates[] = $dt->format("m-d-Y");
$dt->modify($modifier);
}
return $dates; //array returned
}
示例电话:
$dates = getDates("weekly", "06-13-2016", date("m-d-Y"));
你需要提供一些结束数组的东西,所以我提供了生成日期的结束日期,作为函数的第三个参数。如果你不提供它,它将默认为今天,所以在上面的例子中它可能被省略。
在eval.in上看到它。