当前位置: 首页 > 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.gsyq.cn/news/1489263.html

相关文章:

  • 深圳防水补漏哪家靠谱?2026正规修缮公司排名实测 - 苏易修缮
  • D3KeyHelper终极指南:5分钟掌握暗黑3自动化战斗技巧,彻底解放你的双手!
  • 七、Linux网络管理
  • Codex Mini使用教程:手机远程连接Mac版Codex客户端教程
  • P2056 [ZJOI2007] 捉迷藏 / abc460_f - Farthest Pair Query
  • Windows系统定制化封装
  • 飞书文档转Markdown:一键解决跨平台文档迁移难题
  • AI资讯与实时新闻日报 | 2026年6月7日
  • 人工智能日报 每日AI新闻(2026年6月7日):提示注入防护、苹果AI预期与中美Agent生态升温
  • 如何快速解决Krita AI Diffusion插件中SD3模型CLIP文件缺失问题:完整配置指南
  • tcpdump 与 Wireshark 网络抓包实战:远程抓包、过滤表达式、流量分析
  • g3800,g3810,ip2700,g5080,g1800,ts3470,TS8380,ts6480报错5B00,P07,E08,5b02,1704,1700,5b04废墨垫清零,亲测有用。
  • 83万人缺口+31%薪资涨幅:2026高考志愿填报,金融数据赛道到底怎么选?
  • WaveTools终极指南:如何轻松解锁鸣潮120帧并优化游戏体验
  • C# + Modbus TCP + 西门子S7-1200:1000点位工业数据采集系统稳定运行12个月总结
  • Outline 自托管团队知识库/Wiki 搭建教程(Notion 替代方案)
  • 职场工作总结appAI能力比拼哪个好?2026实测多款对比后结果超出多数人预期
  • 从Notebook到生产:机器学习模型落地的七道生死关
  • 终极Windows 11系统优化指南:如何用Win11Debloat免费打造纯净高效系统
  • Plain Craft Launcher 2:高效实用的Minecraft启动器深度解析与实战指南
  • CompressO:3分钟学会如何将大文件压缩到极致,释放90%存储空间!
  • 同一个 AI,为什么到你项目里就开始自作主张——CLAUDE.md 到底该写什么
  • 2026年厦门二手专用车/特种车推荐榜:二手环卫洒水车、扫路车、垃圾车、高空作业车厂家选购指南 - 品牌发掘
  • 错过标讯、筛选太累?2026招投标团队如何摆脱无效搜索
  • 我用了半年只留下这1个,2026职场视频总结效率准确率胜出工具真心太香了
  • 基于NXP多PMIC的Zynq UltraScale+ MPSoC高可靠电源与功能安全设计
  • 京东天猫苏宁商品数据抓取工具包+京东评论情感打分脚本(含Scrapy/Requests双实现、词典规则分析、多平台适配)
  • 026 文件搜索高级技巧:正则表达式深度使用、多行模式、文件类型过滤与上下文控制
  • 律师拜访客户整理视频2026年5款提升视频内容整理效率与准确率工具,省下90人工核对时间
  • 百度网盘macOS版终极加速指南:免费解锁全速下载体验