Php 获取最近6个月的时间戳,显示特定日期的重复项
我有下面的简单代码来检索前6个月的时间戳。它一直运作良好,但今天是12月31日;七月出现两次,十二月出现两次 这让我对用PHP处理时间产生了一种非理性的恐惧Php 获取最近6个月的时间戳,显示特定日期的重复项,php,Php,我有下面的简单代码来检索前6个月的时间戳。它一直运作良好,但今天是12月31日;七月出现两次,十二月出现两次 这让我对用PHP处理时间产生了一种非理性的恐惧 for ($i = 6; $i >= 0; $i--) { $time_start = strtotime('first day of this month 00:00:00', strtotime('-' . $i . ' months')); $time_end = strtotime('last day of t
for ($i = 6; $i >= 0; $i--) {
$time_start = strtotime('first day of this month 00:00:00', strtotime('-' . $i . ' months'));
$time_end = strtotime('last day of this month 23:59:59', strtotime('-' . $i . ' months'));
$timestamps[] = [
'label' => date('M', $time_start),
'start' => $time_start,
'end' => $time_end
];
}
输出:
Array
(
[0] => Array
(
[label] => Jul
[start] => 1561903200
[end] => 1564581540
)
[1] => Array
(
[label] => Jul
[start] => 1561903200
[end] => 1564581540
)
[2] => Array
(
[label] => Aug
[start] => 1564581600
[end] => 1567259940
)
[3] => Array
(
[label] => Oct
[start] => 1569852000
[end] => 1572530340
)
[4] => Array
(
[label] => Oct
[start] => 1569852000
[end] => 1572530340
)
[5] => Array
(
[label] => Dec
[start] => 1575122400
[end] => 1577800740
)
[6] => Array
(
[label] => Dec
[start] => 1575122400
[end] => 1577800740
)
)
我有一个假设,
strotime(“-1个月”)
实际上并没有减去一个完整的月份?我正确地假设strotime(“-1个月”)
没有减去一个完整的按时间顺序排列的月份
我的解决方案是使用DateTime
进行减法,这样感觉更准确
for ($i = 5; $i >= 0; $i--) {
$start = new DateTime('first day of this month 00:00:00');
$start->modify('-' . $i . ' months');
$time_start = strtotime('first day of this month 00:00', $start->getTimestamp());
$time_end = strtotime('last day of this month 23:59', $start->getTimestamp());
$timestamps[] = [
'label' => date('M', $time_start),
'start' => $time_start,
'end' => $time_end
];
}
你得到结果的原因是今天是12月31日。当您使用
strotime('-'.$i.'months')
时,您将获得以下日期序列:
31 December
31 November
31 October
31 September
31 August
31 July
31 June
PHP很方便地识别出其中三个日期是非法的,并将其转换为最佳猜测,给您留下:
31 December
1 December
31 October
1 October
31 August
31 July
1 July
因此,您可以在输出中看到重复(以及丢失的9月和11月)。如您所见,使用DateTime
是解决此问题的最佳方法