我们的用户可以在日历中添加他们的空闲时间,他们只需要标记1周的时间。我必须创建一个for循环,以获得所有用户的开始和结束时间并添加1个月(最多三个月),这样我就可以获得增加月份的开始和结束时间。所以,让我们说用户在数据库中添加了时间戳(目前只有1个用于测试,但可能有很多)是
startTime = 2018-02-28 08:00:00 - endtime = 2018-02-28 08:30:00
然后我需要显示这样的时间:
2018-02-28 08:00:00 - 2018-02-28 08:30:00
2018-03-28 08:00:00 - 2018-03-28 08:30:00
2018-04-28 08:00:00 - 2018-04-28 08:30:00
2018-05-28 08:00:00 - 2018-05-28 08:30:00
这就是我的尝试。
//一直得到
$times = Nanny_availability::where('user_id', user()->id)->get();
foreach($times as $time)
{
$start_times[] = new DateTime($time['start_time']);
$end_times[] = new DateTime($time['end_time']);
$available_times[] = $time['start_time'] . ' - ' . $time['end_time'];
}
// add months
foreach($start_times as $start_time)
{
// add six months times interval
for ($x = 0; $x <= 3; $x++)
{
$sixMonthsStart[] = $start_time->add(new DateInterval("P" . $x . "M"));
}
}
return Response::json($sixMonthsStart);
这是我的json回复。
[
{
"date":"2018-08-28 08:00:00.000000",
"timezone_type":3,
"timezone":"Europe/Helsinki"
},
{
"date":"2018-08-28 08:00:00.000000",
"timezone_type":3,
"timezone":"Europe/Helsinki"
},
{
"date":"2018-08-28 08:00:00.000000",
"timezone_type":3,
"timezone":"Europe/Helsinki"
},
{
"date":"2018-08-28 08:00:00.000000",
"timezone_type":3,
"timezone":"Europe/Helsinki"
}
]
如何添加月份?
答案 0 :(得分:0)
您需要使用DateTimeImmutable
。来自php文档:
此类与DateTime的行为相同,只是它从不修改自身,而是返回一个新对象。
基本上每次在DateTime对象上调用add
时,都会改变基础对象,并且在for
循环的下一次迭代中,您不再拥有与之相同的日期。
因此,您可以在每次迭代时使用DateTimeImmutable
或按月增加1
。
答案 1 :(得分:0)
可以通过这种方式增加月份:
$fmt = 'Y-m-d H:i:s'; // Date format
// Start with a timestamp, such as time() or strtotime($time['start_time'])
$t = time();
print(date($fmt, $t)."\n");
for ($i=0; $i<3; $i++) {
// Feed the string datetime with a text instruction to strtotime()
$t = strtotime(date($fmt, $t).' +1 Month');
// Print resulting date, or store somewhere
print(date($fmt, $t)."\n");
}
运行时从此脚本输出:
2018-03-26 03:17:58
2018-04-26 03:17:58
2018-05-26 03:17:58
答案 2 :(得分:0)
您的问题是您在每次迭代中修改并分配相同的$start_time
对象。 add()
方法不会返回新的DateTime
对象。
使用clone
关键字尝试此方法来制作对象的副本:
for ($x = 0; $x <= 6; $x++)
{
$date = clone $start_date;
$dates[] = $date->modify("+$x months");
}