- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在使用 DateTime DateInterval 和 DatePeriod 计算两个日期之间的间隔时,我在使用 P1W(周)和 P1M(月)时遇到了一些意想不到的结果。
如果我们获取 9 月 30 日至 10 月 29 日之间的月份,则仅输出“Sep”。将结束日期更改为 10 月 30 日会输出“Sep”和“Oct”。我的第一个想法是也许它需要是该月的最后一天,但是当然,10 月有 31 天......
$dateStart = '2014-09-30 00:00:00';
$dateEnd = '2014-10-29 23:59:59'; // Sep
// $dateEnd = '2014-10-30 23:59:59'; // Sep, Oct
// $dateEnd = '2014-10-31 23:59:59'; // Sep, Oct
$dateInt = 'M';
$start = new DateTime($dateStart);
$end = new DateTime($dateEnd);
$interval = new DateInterval('P1'.$dateInt);
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $day) {
var_dump($day->format($dateInt));
}
当尝试获取两个日期之间的周数时,也会发生同样的情况。将结束日期设置为 10 月 27 日星期一,结果中不包括该周 (44)。然而,将结束日期更改为 10 月 28 日星期二,确实包括第 44 周。
$dateStart = '2014-09-30 00:00:00';
$dateEnd = '2014-10-27 23:59:59'; // Monday - 40, 41, 42, 43
// $dateEnd = '2014-10-28 23:59:59'; // Tuesday - 40, 41, 42, 43, 44
// $dateEnd = '2014-10-29 23:59:59'; // Wednesday - 40, 41, 42, 43, 44
$dateInt = 'W';
$start = new DateTime($dateStart);
$end = new DateTime($dateEnd);
$interval = new DateInterval('P1'.$dateInt);
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $day) {
var_dump($day->format($dateInt));
}
有谁知道这是否是一个已知的错误?如果是这样/如果不是,有人知道最好的解决方法/修复吗?
最佳答案
文档在 comments 中说明:
endDate datetime is excluded
所以 2014-09-30 00:00:00 - 2014-10-30 00:00:00 包含 1 个月
但是 2014-09-30 00:00:00 - 2014-10-30 00:00:01 包含 2 个月
此外,文档指出您甚至可以通过在构造函数方法调用中使用标志来排除 startDate。
关于php - 意外的 DateTime DateInterval DatePeriod 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26652057/
我想从 DateInterval 数组中排除 DateInterval 数组。这是我的代码,但我认为它不会有帮助。有时它会进入无限循环,我无法解决它。 extension DateInterval {
试图从几秒钟内生成简单的“H:i:s”字符串,但不能 例子: $iSecond = 188; $dtF = new DateTime("@0"); $dtT = new DateTime("@$iSe
我有一个 mySQL 表,其中有 2 列,其中包含日期。 while 循环将它们每个放入一个变量:$start_date 和 $end_date,计算它们之间的时间,并使用 diff() 将其放入新变
在我的数据库中,我的day为int。比我得到的 $diff 是 DateTime。 $diff->format("%d"); SELECT * FROM smt WHERE day = $diff 即
我正在使用以下代码: public static function getDays($day, $m, $y) { $days = new DatePeriod( new DateTime
如果我有一个时间格式字符串,如“14:30:00”(“小时:分钟:秒”),我如何从该字符串中获取 DateInterval? 我可以获得一个日期时间: $datetime= DateTime::cre
在玩 PHP 时,我想到了这一点: diff($MarchTheSecond); echo $interval->m.PHP_EOL; // Outputs 0. WTF? $FebruaryTheF
我使用的是 5.4.24 版的 php,我不能使用 DateInterval 类。 我收到此错误:PHP fatal error :找不到“DateInterval”类 $interval
在运行一些测试时,注意到检查 DateInterval 对象的公共(public)属性会返回 false,即使它们包含数据。为什么这是/我们从文档中遗漏了什么? 例子: $currentDate =
尝试获取最后四个星期日,从最近的星期日开始循环递减。 // most recent sunday $mostRecentSunday = new DateTime('last sunday'); //
如何比较两个 DateInterval 对象?像这样的东西: $d1 = new DateInterval("P1M"); $d2 = new DateInterval("P2M"); if($d2
情况/问题 我在 PHP 中遇到 DateInterval 问题。 鉴于以下代码 $interval = new DateInterval("PT6000S"); echo $interval->h;
所以,我减去两个日期: $d = $start->diff($end); 现在我想获取以秒为单位的日期(不是 second 参数)。我知道它可以用本地 Php 函数来完成 - 但它只能在 1970 年
我编写了一些用于输入重复事件的代码。最棘手的部分是用户可以创建一个事件并让它在每 x 周的一周中的选定日期重复。 例如,用户可以选择周一、周三、周五并每 3 周重复一次。 很容易做到,如果每周 - 我
我已经编写了一些用于输入重复事件的代码。最棘手的部分是用户可以创建一个事件并让它在每周的选定日期重复 x 周。 例如,用户可以选择周一、周三、周五,并每 3 周重复一次。 每周 很容易做到 - 我可以
如何在 PHP 中创建瞬间 DateInterval?例如: 0.123456 sec ? DateInterval::__construct 的间隔规范 没有F,也没有f,类似于支持分秒的DateI
我知道这个话题已经很累了,但显然还不够! $temp_d1 = new DateTime(date('Y-m-d', $fromTime)); // 2012-01-01 $temp_d2 = new
我想在我的应用程序中将一些数据存储为字典,与此数据的创建日期相关。它应该看起来像这样: // hours [ 17:00 - 18:00 : 34.5, 18:00 - 19:00 : 41.2,
当我使用 DateInterval 类时,它返回一个名为“d”的属性,然后返回另一个名为“Days”的属性,我真的很困惑这两者之间的区别。有人可以解释一下吗。 下面是我的代码中返回的对象的示例。 Da
所以我花了很多时间研究如何最好地将重复事件添加到我的日历应用程序。 我想使用 PHP DateInterval 函数并编写了下面的代码来尝试找出如何根据原始事件 Start Date、Finish D
我是一名优秀的程序员,十分优秀!