php - DateTime 加 1 个月将返回错误的日期
问题描述
我今天偶然发现了这个:
如果我从今天的日期减去 1 个月和 1 天,我会得到 2020-10-31,如果我将其反转,所以我将 1 个月和 1 天添加回原始日期,那么我应该得到今天的日期,但我得到明天的日期.
$now=DateTime::createFromFormat('Y-m-d', '2020-12-01');
$now->sub(new DateInterval('P1M1D'));
$now->add(new DateInterval('P1M1D'));
echo($now->format('Y-m-d')); \\ prints 2020-12-02
assert($now->format('Y-m-d')=='2020-12-01'); \\Fails
有没有人对此有解释,我怎样才能避免得到错误的日期?
编辑
- 代码本身是无用的。我的一个单元测试发现了这个问题。该测试正在检查当前日期和给定日期减号之间的天数
P1M1D
。这个测试昨天得到了 1 而不是 0。 - 我尝试使用不同的方式来获得一天喜欢
strtotime('-1 month -1 day')
和DateTime
的modify
方法
编辑 2
我实际上在stackoverflow上找到了这个确切的问题(不知道我昨天怎么没找到它)这个答案详细回答了我的问题。
解决方案
推荐阅读
- python - 如何修复:ValueError:检查输入时出错:预期 conv2d_130_input 的形状为 (1, 512, 512) 但数组的形状为 (79, 512, 512)
- java - 使用 LinkedQueue 模拟购物线
- python - 在python混淆中分配变量
- c# - Xamarin Android:资源 android:样式/AppTheme.Base 未找到
- unicode - BOCU-1 用于字符串的内部编码
- types - 如何明确告诉 Rust 编译器数组切片的长度?
- c - 我试图了解指针和指针数组是如何工作的。我在这个程序中不明白什么?
- question-answering - BERT 在 SQuAD 的 QA 答案中出现的特殊字符是什么意思?
- xpath - 在 Google 表格中使用 =Importxml 时将单元格数据添加到 URL 时出现问题
- javascript - 脚本仅适用于 Gatsby/React 中的页面刷新