我发现一个奇怪的结果,当我使用扩散数月的拉维碳。谁能为我解释一下为什么它是这样工作的。是虫子吗?以及如何使其正确。
$d1 = new Carbon('2018-02-01');
$d2 = new Carbon('2018-03-01');
dd($d1->diffInMonths($d2));
产量为: 0(预期: 1)
但是
$d1 = new Carbon('2018-02-02');
$d2 = new Carbon('2018-03-02');
dd($d1->diffInMonths($d2));
产出为:1
我设置的时区是“亚洲/胡志明”(GMT 7)。PHP版本7.0.22。操作系统:Ubuntu服务器16.04
这个奇怪的结果只发生在2月1日到3月1日之间,其他月份的结果也是意料之中的。
我也尝试date_diff
而不是Carbon
$d1 = new \DateTime('2018-02-01');
$d2 = new \DateTime('2018-03-01');
$diff = date_diff($d1,$d2);
dump($diff->m);
dump($diff->d);
die;
它返回月份:0,天数:28(不是预期的月份:1,天数:0)
所以问题可能来自PHP,而不是Carbon。
我认为将时区设置为UTC应该可以解决这个问题。当时区设置为Europe/Zurich
时,我也遇到了同样的问题:
>>> $last = new \Carbon\Carbon('2019-02-01');
=> Carbon\Carbon @1548975600 {#2381
date: 2019-02-01 00:00:00.0 Europe/Zurich (+01:00),
}
>>> $now = (\Carbon\Carbon::now())->day(1)->setTime(0, 0, 0);
=> Carbon\Carbon @1551394800 {#2371
date: 2019-03-01 00:00:00.0 Europe/Zurich (+01:00),
}
>>> $now->diffInMonths($last)
=> 0
将时区更改为UTC后:
>>> $last = new \Carbon\Carbon('2019-02-01', 'UTC');
=> Carbon\Carbon @1548979200 {#2380
date: 2019-02-01 00:00:00.0 UTC (+00:00),
}
>>> $now = (\Carbon\Carbon::now('UTC'))->day(1)->setTime(0, 0, 0);
=> Carbon\Carbon @1551398400 {#2394
date: 2019-03-01 00:00:00.0 UTC (+00:00),
}
>>> $now->diffInMonths($last)
=> 1
您提供的代码应该可以工作。尽管你可以尝试碳的替代品。试试DateTime
$d1 = new DateTime('2018-02-01');
$d2 = new DateTime('2018-03-01');
$diff = date_diff($d1,$d2);
dd($diff->m);
你应该用碳来设置时区,现在它可以工作了:
Carbon::now(new \DateTimeZone('Asia/Ho_Chi_Minh'));
$d1 = new Carbon('2018-02-01');
$d2 = new Carbon('2018-03-01');
dd($d1->diffInMonths($d2));
问题内容: 该的getTime()获取以毫秒为某一特定日期时间。能否可靠地用于18世纪的约会。我们使用Millis并将其存储在字符串变量中以备将来比较。过去可以使用多长时间有限制? 问题答案: 如果您要比较遥远的过去的日期/时间,我强烈建议您看一下JodaTime。或者实际上是任何类型的日期/时间比较和计算。这是一个很棒的图书馆! 不要依靠getTime()做你想做的事情。至少考虑使用Java的C
问题内容: 我在sql server中有一个datetime列及其可选字段,如果用户决定不输入,那么我想在表中插入NULL值,并定义如下内容: 当我插入sql server时,我在asp.net中有此代码 但问题是:其插入 在SQL表而不是 我在这里做错了什么? 更新: 问题答案: 假设您有: 如果您想插入SQL NULL,那么您应该下一步: 意思是: 如果要在函数中注意可空的datetime,则
因此,我想将x轴范围设置为从1月到12月。所以x_data和y_data是动态的,例如x_data = [ 'Jan', 'Feb] 和 y_data = [10, 20]。所以图表在 x 轴上只显示两个值(仅限 jan 和 feb),但如果数据不可用,我希望所有月份都在 x 轴上。我试图将xaxis的范围设置为[“1月”,“2月”,“3月”,“4月”,“5月”,“6月”,“7月”,“8月”,“9
我想在excel-vba中编写一个代码,在工作表的一列中填充特定年份的日期。< br >该准则还应考虑闰年。比方说,我已经在单元格B1中输入了年份(如2020年),因此列A应该填充366个日期条目(考虑到闰年)。
所以代码的开头部分是:
问题内容: 我正在使用以下代码 输出是 添加到 一月 是给 月 月。如果我们在当前日期加上30天,则可能返回正确的输出。但我想显示 2 月。有人可以帮我吗.. 问题答案: 您可以看到+1设置字段添加的日期与您的日期不同(从输出中观察到)。 如果你想几个月,那么使用代码