php - 理解日期时间差异和反转的问题
问题描述
我在理解日期时间之间的区别时遇到问题。我正在使用 PHP 日期时间类。
这是我计算日期时间差的一小部分代码:
date_default_timezone_set("Asia/Kolkata");
function timeline_date($date)
{
$today = new DateTime();
$timeline_date = new DateTime($date);
$interval = $today->diff($timeline_date);
echo "<pre>";
print_r($today);
print_r($timeline_date);
print_r($interval);
echo "</pre>";
}
$date = "2019-02-02 04:36:02";
echo timeline_date($date);
声明的含义是什么:
$interval = $today->diff($timeline_date);
是从 $today 中减去 $timeline_date 吗?
还是从 $timeline_date 中减去 $today?
我对这个特定的陈述感到非常困惑。我在互联网上搜索但没有明确提及。
$timeline_date 也可以是过去或将来的日期,甚至是今天的日期。那么我们应该从大量中减去少量是否重要?
我从上面的代码中得到以下输出:
DateTime Object
(
[date] => 2019-02-05 16:11:37
[timezone_type] => 3
[timezone] => Asia/Kolkata
)
DateTime Object
(
[date] => 2019-02-02 04:36:02
[timezone_type] => 3
[timezone] => Asia/Kolkata
)
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 3
[h] => 11
[i] => 35
[s] => 35
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 1
[days] => 3
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
我们可以[invert] => 1
在上面的数组中看到。它的实际意义是什么?如果我将 $date 更改为:
$date = "2019-02-10 04:36:02";
然后[invert] => 0
更改为 1。为什么?这是否意味着如果我们有过去的日期差异,那么 invert 将为 0,如果我们有未来的日期,那么这个数组元素将为 1?
解决方案
DateTime::diff
给你两个日期之间的差异,有点明显。哪个更大或更小并不重要,无论如何,增量都是增量。但是,生成的DateInterval
对象确实会注意到属性中哪个更大或更小DateInterval::$invert
:
如果间隔表示负时间段,则为1 ,否则为0。见
DateInterval::format()
。
规则是 if $b
in $a->diff($b)
is before $a
,$invert
is 1
。看着 said DateInterval::format
,你会看到:
R
负号“-”,正号“+”负号
r
“-”,正号空
因此,如果您确实关心未来/过去的差异,则可以使用%R
/%r
格式化参数DateInterval::format
来输出“-”和/或“+”。如果您不在乎,只需省略该选项,这无关紧要。
推荐阅读
- bash - Bash 脚本在 if 条件下无法解释地退出
- c++ - C++块作用域extern声明链接,混淆C++标准解释
- salesforce-service-cloud - Salesforce 开发和配置
- angularjs - Pass Angular object property through variable?
- python - 在具有 multiLine=True 的 Windows 上 spark read.csv 会产生奇怪的 unicode 结果
- sql - 计算给定时间段内相同记录存在的次数
- javascript - WebView 导航不起作用
- amazon-web-services - EC2 自动安装更新
- c# - RestSharp - 无法连接到远程服务器
- oracle-apex-5.1 - Apex 5.1 表单页面项目不接受 pl/sql 函数体作为默认值