所以我有一个日期作为字符串:
2011/06/01
Run Code Online (Sandbox Code Playgroud)
我需要从中获取与该周的五个工作日(星期一到星期五)相对应的5个DateTime对象,例如,我需要2011-05-30到2011-06-03.
怎么做?我知道我能做到:
$dateTime = new DateTime('2011/06/01');
Run Code Online (Sandbox Code Playgroud)
但我有点卡在那里:)我知道,令人尴尬.
可以使用DatePeriod:
$firstMondayThisWeek= new DateTime('2011/06/01');
$firstMondayThisWeek->modify('tomorrow');
$firstMondayThisWeek->modify('last Monday');
$nextFiveWeekDays = new DatePeriod(
$firstMondayThisWeek,
DateInterval::createFromDateString('+1 weekdays'),
4
);
print_r(iterator_to_array($nextFiveWeekDays));
Run Code Online (Sandbox Code Playgroud)
请注意,这DatePeriod是一个Iterator,所以除非你真的修复了数组中的日期,你也可以使用DatePeriodas容器.
以上将给出类似的东西(演示)
Array
(
[0] => DateTime Object
(
[date] => 2011-05-30 00:00:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[1] => DateTime Object
(
[date] => 2011-05-31 00:00:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[2] => DateTime Object
(
[date] => 2011-06-01 00:00:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[3] => DateTime Object
(
[date] => 2011-06-02 00:00:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)
[4] => DateTime Object
(
[date] => 2011-06-03 00:00:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)
)
Run Code Online (Sandbox Code Playgroud)
一个5.3之前的解决方案就是这样做
$firstMondayInWeek = strtotime('last Monday', strtotime('2011/06/01 +1 day'));
$nextFiveWeekDays = array();
for ($days = 1; $days <= 5; $days++) {
$nextFiveWeekDays[] = new DateTime(
date('Y-m-d', strtotime("+$days weekdays", $firstMondayInWeek))
);
}
Run Code Online (Sandbox Code Playgroud)
虽然我真的不明白为什么当你不能/不能在你的项目中使用他们的API时你想要使用DateTime对象.如您所见,这是所有旧日期函数,DateTime只是容器.
| 归档时间: |
|
| 查看次数: |
3477 次 |
| 最近记录: |