即时消息接口完结

This commit is contained in:
2025-11-19 15:34:37 +08:00
parent 45b4efa759
commit 2a89361d3e
5 changed files with 167 additions and 147 deletions

View File

@@ -141,16 +141,60 @@ function simple_decrypt(string $ciphertext, string $key): string|false
}
/**
* 微信风格时间格式化(仅用原生 date/strtotime 函数,周一为一周起点)
* @param string $inputTime 输入时间字符串支持Y-m-d H:i:s、timestamp、Y-m-d 等)
* @param string $timezone 时区(默认北京时间,原生函数依赖服务器时区,建议提前配置)
* @return string 格式化结果09:11、昨天 15:30、周一 10:20、11-16 08:05、2024-05-20 14:30
*/
function formatWeChatTime(string $inputTime, string $timezone = 'Asia/Shanghai'): string
{
// 1. 配置时区(原生函数需手动设置,避免服务器时区差异)
date_default_timezone_set($timezone);
// 2. 转换目标时间为时间戳(兼容多种输入格式)
$targetTimestamp = strtotime($inputTime);
if ($targetTimestamp === false) {
error_log('无效时间格式:' . $inputTime);
return $inputTime; // 无效时间返回原始值
}
// 3. 计算关键时间边界的时间戳(原生函数核心)
$nowTimestamp = time(); // 当前时间戳
$todayStart = strtotime('today'); // 今天 00:00:00等价于 mktime(0,0,0,date('m'),date('d'),date('Y'))
$yesterdayStart = strtotime('yesterday'); // 昨天 00:00:00today - 86400
$currentWeekDay = date('N', $todayStart); // 今天是本周第几天1=周一7=周日)
$mondayStart = strtotime("-$currentWeekDay days +1 day", $todayStart); // 本周一 00:00:00
$yearStart = strtotime(date('Y') . '-01-01 00:00:00'); // 今年 1月1日 00:00:00
// 4. 周几映射date('N') 返回 1-7 → 对应周一-周日)
$weekMap = [1 => '周一', 2 => '周二', 3 => '周三', 4 => '周四', 5 => '周五', 6 => '周六', 7 => '周日'];
// 5. 按优先级判断场景(从近到远)
// 场景1今天>= 今天0点
if ($targetTimestamp >= $todayStart) {
return date('H:i', $targetTimestamp);
}
// 场景2昨天>= 昨天0点 且 < 今天0点
if ($targetTimestamp >= $yesterdayStart && $targetTimestamp < $todayStart) {
return '昨天 ' . date('H:i', $targetTimestamp);
}
// 场景3本周内>= 本周一0点 且 < 今天0点→ 显示周几+时间
if ($targetTimestamp >= $mondayStart && $targetTimestamp < $todayStart) {
$targetWeekDay = date('N', $targetTimestamp); // 目标时间的周几
return $weekMap[$targetWeekDay] . ' ' . date('H:i', $targetTimestamp);
}
// 场景4今年内>= 今年1月1日 且 < 本周一0点→ 显示月-日+时间
if ($targetTimestamp >= $yearStart && $targetTimestamp < $mondayStart) {
return date('m-d H:i', $targetTimestamp);
}
// 场景5去年及以前< 今年1月1日→ 显示完整日期+时间
return date('Y-m-d H:i', $targetTimestamp);
}
/**
* 多维数组去重并重新索引