当前位置: 首页 > news >正文

PHP日期时间区间与周期计算

PHP日期时间区间与周期计算

日期区间和周期计算在业务中很常用。比如统计某段时间的数据、生成时间序列。今天说说PHP中日期区间和周期的计算。

DatePeriod可以生成时间序列。

```php
$start = new DateTime('2024-01-01');
$end = new DateTime('2024-01-10');
$interval = new DateInterval('P1D');
$period = new DatePeriod($start, $interval, $end);

echo "日期范围:\n";
foreach ($period as $date) {
echo $date->format('Y-m-d') . "\n";
}

// 按周生成
$weekStart = new DateTime('2024-01-01');
$weekEnd = new DateTime('2024-03-31');
$weekInterval = DateInterval::createFromDateString('1 week');
$weeks = new DatePeriod($weekStart, $weekInterval, $weekEnd);

echo "周范围:\n";
foreach ($weeks as $week) {
echo "周开始: " . $week->format('Y-m-d') . "\n";
}
?>

计算两个日期之间的差值。

```php
function dateDiffInDays(string $start, string $end): int
{
$start = new DateTime($start);
$end = new DateTime($end);
return (int)$start->diff($end)->days;
}

function calculateAge(string $birthDate): int
{
return (new DateTime($birthDate))->diff(new DateTime())->y;
}

function getBusinessDays(string $start, string $end): array
{
$start = new DateTime($start);
$end = (new DateTime($end))->modify('+1 day');
$interval = new DateInterval('P1D');
$period = new DatePeriod($start, $interval, $end);

$businessDays = [];
foreach ($period as $date) {
if ($date->format('N') < 6) {
$businessDays[] = $date->format('Y-m-d');
}
}
return $businessDays;
}

echo "相差天数: " . dateDiffInDays('2024-01-01', '2024-12-31') . "\n";
echo "年龄: " . calculateAge('1995-06-15') . "\n";
echo "工作日: " . implode(', ', getBusinessDays('2024-01-01', '2024-01-10')) . "\n";
?>

日期区间查询在数据库中的应用。

```php
function queryByDateRange(PDO $pdo, string $startDate, string $endDate): array
{
$stmt = $pdo->prepare("
SELECT DATE(created_at) as date, COUNT(*) as count
FROM orders
WHERE created_at >= ? AND created_at < ?
GROUP BY DATE(created_at)
ORDER BY DATE(created_at)
");
$stmt->execute([$startDate, $endDate]);
$results = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);

// 填充没有数据的日期
$start = new DateTime($startDate);
$end = new DateTime($endDate);
$period = new DatePeriod($start, new DateInterval('P1D'), $end);

$complete = [];
foreach ($period as $date) {
$key = $date->format('Y-m-d');
$complete[$key] = $results[$key] ?? 0;
}

return $complete;
}
?>

季度和年度的计算。

```php
function getQuarterRange(int $year, int $quarter): array
{
$startMonth = ($quarter - 1) * 3 + 1;
$start = new DateTime("{$year}-{$startMonth}-01");
$end = (clone $start)->modify('+3 months -1 day');
return ['start' => $start->format('Y-m-d'), 'end' => $end->format('Y-m-d')];
}

function getYearRange(int $year): array
{
return [
'start' => "{$year}-01-01",
'end' => "{$year}-12-31",
];
}

for ($q = 1; $q <= 4; $q++) {
$range = getQuarterRange(2024, $q);
echo "Q{$q}: {$range['start']} ~ {$range['end']}\n";
}
?>

日期区间的统计在报表和数据可视化中很常见。DatePeriod类配合DateTime可以灵活处理各种时间序列。填充没有数据的日期是生成完整报表的关键技巧。

http://www.jsqmd.com/news/977534/

相关文章:

  • 2026年企业必知:3款热门的GEO优化软件深度测评(附得客GEO实战数据)
  • 七、Linux网络管理
  • 告别静态数据!用ArcGIS Knowledge实战企业级时空知识图谱(附配置流程)
  • 3个关键步骤解锁PCL2启动器内存优化:让低配电脑流畅运行大型模组
  • 029、Web 搜索与抓取:WebFetch、WebSearch 在研究型任务中的策略与信息整合
  • Windows系统定制化封装
  • Codex Mini使用教程:手机远程连接Mac版Codex客户端教程
  • Meltano:声明式的数据集成引擎
  • P2056 [ZJOI2007] 捉迷藏 / abc460_f - Farthest Pair Query
  • 保姆级教程:在CentOS 7上一步步搞定Oracle 12c数据库安装与配置(附常见问题排查)
  • AI 驱动的云原生智能运维(AIOps)深度解析:从 eBPF+ML 异常检测到 LLM 辅助故障诊断的工程实践
  • SQLPlus简介
  • Type-I错误与Type-II错误:统计推断中的风险权衡本质
  • 飞书文档转Markdown:一键解决跨平台文档迁移难题
  • 超标量流水线和超流水线:CPU提速的黑科技
  • 广州TikTok代运营公司推荐:2026 权威榜单与深度解析(更新时间2026-06-08 15:28:08) - 趣谈科技事物
  • GetQzonehistory:5分钟永久备份QQ空间所有历史记忆,告别数据丢失焦虑
  • 如何快速解决Krita AI Diffusion插件中SD3模型CLIP文件缺失问题:完整配置指南
  • 人工智能日报 每日AI新闻(2026年6月7日):提示注入防护、苹果AI预期与中美Agent生态升温
  • 【计算机毕业设计案例】基于springboot+微信小程序的旅游线路定制微信小程序(程序+文档+讲解+定制)
  • AI资讯与实时新闻日报 | 2026年6月7日
  • 深度剖析AI视觉瞄准系统:基于YOLOv5的实时游戏目标检测实战指南
  • g3800,g3810,ip2700,g5080,g1800,ts3470,TS8380,ts6480报错5B00,P07,E08,5b02,1704,1700,5b04废墨垫清零,亲测有用。
  • Python 实战:用 wxPython 写一个 MD5 文件查重清理工具
  • 2026 在校大学生可以考哪些经管专业证书
  • tcpdump 与 Wireshark 网络抓包实战:远程抓包、过滤表达式、流量分析
  • 南京大学LaTeX论文模板:3步搞定专业学位论文排版
  • 微信小程序计算机毕设之于springboot+微信小程序的扶贫助农系统及其小程基于springboot+微信小程序的扶贫助农系统及其小程序的实现(完整前后端代码+说明文档+LW,调试定制等)
  • 网盘下载速度慢?这6款工具帮你突破限速,让下载速度提升10倍
  • 2026年 磁珠厂家推荐排行榜:东莞插件磁珠/空心磁珠/抗干扰磁珠/电源磁珠全品类优质工厂与品牌深度盘点 - 品牌发掘