您好我需要计算一些DateInterval之间的平均时间.
其实我有一些像这样的Dateinterval:
for ($i = 0 ; $i < count($startDate) ; $i++)
{
$diffTable[] = date_diff($finishDate[$i], $startDate[$i]);
echo $diffTable[$i]->format("%Y-%M-%d %H:%i:%s");
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
00-00-0 00:13:17
00-00-0 00:7:47
00-00-0 00:7:14
00-00-0 00:10:39
Run Code Online (Sandbox Code Playgroud)
我需要计算这个间隔之间的平均时间.这里只有分钟和秒钟,但可能是月份或年份.
我找不到一个很容易计算的好方法.我可以简单地添加每个dateInterval与这样的转换:
sec + 60xmin + 3600xHour ...
他们和Modulo(%)一起玩.
但我希望还有另一种方式吗?
如果我有一个时间格式字符串,如"14:30:00"("小时:分钟:秒"),我如何从字符串中获取DateInterval?
我可以得到一个DateTime:
$datetime= DateTime::createFromFormat("H:i:s","14:30:00");
Run Code Online (Sandbox Code Playgroud)
但是我需要将它添加到另一个DateTime对象,而date_add需要一个DateInterval.
在对Dateperiod进行一些研究之后,事实证明它默认情况下排除了enddate,即使它没有在PHP手册中的任何地方明确说明.我也没有注意到包括它的任何选择.似乎唯一的选择是排除开始日期的选项.有没有其他人遇到过这个?
假设我有DateInterval的这个对象实例:
$obj=new DateInterval("P1Y12D");
Run Code Online (Sandbox Code Playgroud)
现在我可以用这个$obj实例做一些漂亮的事情,但是说我想"P1Y12D"从对象中获取该字符串,是否可以直接实现而无需覆盖类?
我没有找到一种方法,也许你这样做.
我试图确定是否DateTime与a的可能发生完全一致DateInterval.我正在使用的间隔需要允许"下个月的第N个Xday"类型格式规范,并且我不确定在这些条件下这样的事情是可能的.
我的基本想法是将其反转DateInterval,将其应用于原始克隆DateTime,将其原样放回原处,再次应用,然后检查两个DateTime实例是否相等.如果是这样,它恰好发生在间隔上:
public static function dateFallsOnPeriod(DateTime $date, DateInterval $interval)
{
$compare = clone $date;
// invert the period, apply it to the date, uninvert & then reapply
$interval->invert = 1;
$compare->add($interval);
$interval->invert = 0;
$compare->add($interval);
return $date == $compare;
}
Run Code Online (Sandbox Code Playgroud)
这似乎在相同的方向上应用了两次间隔,因此我再次尝试使用->sub()和->add(),导致致命错误"DateTime :: sub():仅减去非特殊的相对时间规范".似乎根本没有实现这种功能.
有没有人有更好的想法,而不是在开始日期之后选择一个偏移的丑陋和低效的解决方案并向前迭代直到我们匹配它或过去?
提前致谢!
我正在使用以下代码:
public static function getDays($day, $m, $y) {
$days = new DatePeriod(
new DateTime("first $day of $m $y"),
DateInterval::createFromDateString('next ' . $day),
new DateTime("last day of $m $y")
);
foreach ($days as $day) {
$dates[] = $day->format("Y-m-d");
}
return $dates;
}
Run Code Online (Sandbox Code Playgroud)
它在很大程度上起作用.我给它一个范围,它返回我在范围内的每一天的日期.
用法:
foreach(General::getDays('friday',$this->_uri[2],$this->_uri[3]) as $date) {
var_dump($date);
}
Run Code Online (Sandbox Code Playgroud)
2013年7月,这将在2013年7月的所有星期五返回正确的4个结果:
string '2013-07-05' (length=10)
string '2013-07-12' (length=10)
string '2013-07-19' (length=10)
string '2013-07-26' (length=10)
Run Code Online (Sandbox Code Playgroud)
但是,在最后一天与我所追踪的日期(例如,2013年5月和2014年1月的星期五)相匹配的一个月,它错过了返回结果中的月份的最后一天.
2013年5月的结果,当然缺少星期五的第31天:
string '2013-05-03' (length=10)
string '2013-05-10' (length=10)
string '2013-05-17' (length=10)
string '2013-05-24' (length=10)
Run Code Online (Sandbox Code Playgroud)
有没有人有这个答案?这是我错过使用DateInterval还是本课程中的真正错误?
我使用的是PHP版本5.4.24,我不能使用DateInterval类.
我收到此错误:PHP致命错误:找不到类'DateInterval'
$interval = new DateInterval('P91D');
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能使这段代码有效?
我目前正在处理一个 php 项目,需要将 DateInterval 格式化为 ISO8601(类似这样):
P5D
Run Code Online (Sandbox Code Playgroud)
这种格式可用于创建 DateTime 和 DateInterval 对象,但我想不出将 DateInterval 格式化为这种格式的方法。有没有?如果不是,那么轻量级的解决方案可能是什么?
我正在使用此代码:
$due_date = new DateTime($_POST['due_date']);
$today = new DateTime();
$months = $due_date->diff($today);
$months->format("%m");
$fine = 0.02 * $price * $months; // i got error in this line
$bill = $price + $fine;
Run Code Online (Sandbox Code Playgroud)
我想计算一下,如果有人迟交,那么他们每个月都会被罚款。错误信息是:
Object of class DateInterval could not be converted to int
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下代码在Twig中显示DateInterval:
{{ event.endTime.diff(event.startTime)|date("i's''") }}
Run Code Online (Sandbox Code Playgroud)
event获取2个DateTime对象的实体在哪里:endTime和startTime.使用该命令我得到了这个输出:
i's''
Run Code Online (Sandbox Code Playgroud)
而不是min'sec''喜欢08'15''
在日期文件中说
日期过滤器接受[...] DateInterval实例
此工作用于显示日期对象的min和sec.
请注意:执行:{{ (event.endTime.diff(event.startTime))|date("i's''") }}不会更改任何内容
我也尝试了,{{ date(event.endTime.diff(event.startTime))|date("i's''") }}但这会导致异常Object of class DateInterval could not be converted to string
我也看到了time_diff从细枝扩展但这返回一个字符串(in或ago),而不是一个Date对象,然后因为我想我不能显示它.
如果您需要更多信息,请告诉我.谢谢您的帮助.