如何解决仅在标记为星期几的结束日期 laravel/php 之间保存日期 startdate
首先,早上好。
查询可能有点混乱,但我会尽力解释自己。
在这个例子中,我从一个表单中收到一个开始和结束日期,以及一个数组,其中包含我想要递归保存的这两个日期之间的星期几。
在下面的请求中,我在星期一(1)、星期二(2)、星期五(5)中放置了一个月的差异,但我不知道如何从中获得这些天的确切日期Y/m/d 并保存它们。
我的要求:
array:8 [▼
"_token" => "OxIKlatx6q4BcFVfLc8aB0mxQzDmOEw627s9TaSq"
"name" => "Dates to save"
"start_date" => "07/06/2021"
"end_date" => "08/07/2021"
"days" => array:4 [▼ <- Thats my array of days from form being 0 sunday,1 monday...
0 => "1"
1 => "2"
2 => "5"
]
还有我的控制器:
$startDate=$request->start_date;
$endDate=$request->end_date;
$period = CarbonPeriod::create($startDate,$endDate);
foreach ($period as $date) {
// filter by day of week
$date->format('Y-m-d');
}
谢谢大家
解决方法
$period = CarbonPeriod::create(
Carbon::createFromFormat('d/m/Y','07/06/2021'),Carbon::createFromFormat('d/m/Y','08/07/2021'),)->filter(
fn ($date) => in_array($date->dayOfWeek,[1,4,5]),);
foreach ($period as $date) {
$date->format('Y-m-d');
}
对于旧版本的 PHP:
$days = [1,5];
$period = CarbonPeriod::create(
Carbon::createFromFormat('d/m/Y','08/07/2021')
)->filter(function ($date) use ($days) {
return in_array($date->dayOfWeek,$days);
});
,
在不知道周数的情况下,很难假设所指的是 07/06/2021
和 08/06/2021
之间的哪个“星期一”。
我建议选择将实际日期发送到服务器的前端库或实现。
例如,flatpickr。
使用此库,您可以定义多个日期/范围,并确保您的服务器会收到实际日期。即:
HTML
<article>
<form action="">
<input name="attendance_dates" type="text" placeholder="Select Dates.." class="date-multiple" id="attendance-dates">
<input type="submit" id="date-multiple-submit-btn">
</form>
</article>
CSS
article {
padding: 16px;
width: 50%
}
JS
const fp = flatpickr(".date-multiple",{
mode: "multiple",dateFormat: "Y-m-d"
});
$("#date-multiple-submit-btn").click(function (e) {
e.preventDefault();
$.ajax({
type: "POST",url: "your-form-submit-route",data: {
"_method": "POST","_token": $('meta[name="csrf-token"]').attr("content"),"name": "Dates to save","dates": $("#attendance-dates").val()
},success: function (response) {
console.log(response);
},});
})
控制器
$dates = empty($d = $request->attendance_dates) ? [] : explode($d); // [2021-06-14,2021-06-23,2021-06-12,2021-07-14]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。