我没能找到解决这个问题的正确方法.正如您在PHP文档中的示例#3中看到的那样,他们声明在使用DateTime :: add中的DateInterval 添加月份时必须要注意.
对于为什么方法的行为是这样的,并且我可以做些什么来避免这种情况并没有任何解释,我发现这是一个错误.
有人对此有所了解吗?
我有两个DateTime对象:
$start = new DateTime('first thursday of June 2012');
$end = new DateTime('2012-12-31');
Run Code Online (Sandbox Code Playgroud)
我需要一个DatePeriod包含这两个日期之间的所有月份的所有第一个星期四.使用时
$interval = new DateInterval('P1M');
$period = new DatePeriod($start, $interval, $end);
Run Code Online (Sandbox Code Playgroud)
这仅仅增加1个月而不尊重"第一个星期四"的条件.
这样的事情也行不通:
$interval = DateInterval::createFromDateString('1 month first thursday');
$period = new DatePeriod($start, $interval, $end);
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎么能做到这一点?
这是我的代码:
$timezone = new \DateTimeZone('America/New_York');
$date1 = new \DateTime (date("Y:m:d H:i:s", time()), $timezone);
$date1->add(new \DateInterval ("PT24H"));
echo $date1->format('Y-m-d h:s:m');
Run Code Online (Sandbox Code Playgroud)
这应该增加24小时到当前时间.问题是,每次刷新页面时,我都会得到不同的结果.而且我并不是说像人们期望的那样仅仅几秒钟,我的意思是很多分钟.一些高于实际时间的一些低于它.
现在在9:51 pm三次刷新给出以下结果:2013-03-26 09:09:03,2013-03-26 09:17:03,2013-03-26 09:30:03
为什么我不能得到实时?到底是怎么回事?
谢谢您的帮助!
我遇到两个日期时间相差的问题。这是显示 DateInterval 对象的命令行:
php -r "\$a = new Datetime('first day of 4 months ago midnight'); \$b = new Datetime('first day of 1 month ago midnight'); var_dump(\$a->diff(\$b));"
Run Code Online (Sandbox Code Playgroud)
这里是DateInterval输出:
class DateInterval#3 (15) {
public $y => int(0)
public $m => int(3)
public $d => int(3)
public $h => int(0)
public $i => int(0)
public $s => int(0)
public $weekday => int(0)
public $weekday_behavior => int(0)
public $first_last_day_of => int(0)
public $invert => int(0)
public $days => int(92)
public $special_type => …Run Code Online (Sandbox Code Playgroud) 我想用 PHP 计算一个月中两个日期之间的差异,但似乎某个地方有一个错误。
$datetime1 = new DateTime(date('Y-m-d'));
$datetime2 = new DateTime(MyObject->getDate());
echo($datetime1->format('d/m/Y'));
echo($datetime2->format('d/m/Y));
Run Code Online (Sandbox Code Playgroud)
结果:
29/01/2016
27/01/2015
$dateInterval = $datetime1->diff($datetime2);
echo($dateInterval->format(%m months);
Run Code Online (Sandbox Code Playgroud)
结果:
0 months
Run Code Online (Sandbox Code Playgroud)
这是为什么?我究竟做错了什么 ?
我想在提供的日期上增加 5 天,但计算必须跳过周末。
我已经知道如何在不跳过周末的情况下添加 5 天:
SELECT DATE_ADD(`date_field`, INTERVAL 5 DAY) As FinalDate
FROM `table_name`;
Run Code Online (Sandbox Code Playgroud)
现在我希望返回值跳过周末。
目前如果date_field = 2016-07-22结果将是2016-07-27
但我希望结果是2016-07-29
如何在 PHP 中创建瞬间 DateInterval?例如:
0.123456秒
?
DateInterval::__construct的interval_spec
没有F也不f类似于支持分秒的DateInterval::format 。
DateInterval::createFromDateString的相对格式列表也没有提及秒的任何分数。
但DateInterval 类属性列表显示:
f 微秒数,以秒的一小部分形式表示。
我能够通过使用两个 DateTimes 的DateTime::diff瞬间获得 DateInterval
例子:
$formatStr = 'Y-m-d H:i:s.u';
$dateTimeStr = '2000-01-01 00:00:00.0';
$timeZone = new \DateTimeZone('UTC');
$timerDateTimeStart = \DateTimeImmutable::createFromFormat($formatStr, $dateTimeStr, $timeZone);
$formatStr = 'Y-m-d H:i:s.u';
$dateTimeStr = '2000-01-01 00:00:00.123456';
$timeZone = new \DateTimeZone('UTC');
$timerDateTimeEnd = \DateTimeImmutable::createFromFormat($formatStr, $dateTimeStr, $timeZone);
$timerDiff = $timerDateTimeStart->diff($timerDateTimeEnd);
$intervalStr = $timerDiff->format('%Y-%M-%D %H:%I:%S.%f');
echo 'Interval (yyyy-mm-dd hh:mm:ss.sfract): ' . $intervalStr; …Run Code Online (Sandbox Code Playgroud) 我知道这个话题非常耗尽,但显然还不够!
$temp_d1 = new DateTime(date('Y-m-d', $fromTime)); // 2012-01-01
$temp_d2 = new DateTime(date('Y-m-d', $endTime)); // 2013-02-01
$interval = $temp_d2->diff($temp_d1);
$monthsAhead = $interval->format('%m'); // returns 1, but I am expecting 13
Run Code Online (Sandbox Code Playgroud)
如何计算两个日期之间的月数,而不是在12个月内进行包装?
我有这个功能,可以为某些东西设置过期.该函数接受一些具有默认值的参数.我是这样做的:
public static function blockAccount(
$id,
$years = 0,
$months = 0,
$days = 0,
$hours = 0,
$minutes = 0,
$seconds = 0
) {
// Determine expiry date for the block
$date = Text::getDateTime();
$date->add(
new \DateInterval(
'P' . $years . 'Y'
. $months . 'M'
. $days . 'D'
. $hours . 'H'
. $minutes . 'I'
. $seconds . 'S'
)
);
$blockedExpiryDate = $date->format(Filter::FORMAT_MICRO_TIMESTAMP);
$accountModel = AccountModel::selectById($id);
$accountModel->setBlockedExpiryDate($blockedExpiryDate);
$accountModel->save();
}
Run Code Online (Sandbox Code Playgroud)
当只用年份设置运行时,我收到一个错误,说:DateInterval::__construct(): Unknown or bad …
我在 SSRS 中的报告上的文本框有以下表达式
="TR1's Sent Between "+Format(dateadd(DateInterval.Day,1-WeekDay(Today), Today), "dd/MM/yyyy")
Run Code Online (Sandbox Code Playgroud)
这将返回星期日日期而不是星期一。有谁知道如何显示当前星期一的日期和当前的星期五?如果你能解释每个部分,那么我理解格式会很棒
dateinterval ×10
php ×8
datetime ×7
date ×1
date-format ×1
dateadd ×1
expression ×1
intervals ×1
mysql ×1
precision ×1
sql ×1