如何在JS中获取日期/时间格式,结合时区通过XMLHttpRequest传至PHP?
获取浏览器本地日期/时间格式并传递给PHP
1. 在JavaScript中获取时区、日期格式、时间格式
利用Intl.DateTimeFormatAPI生成本地格式的日期时间字符串,通过固定测试日期反向映射为PHP兼容的格式符号:
// 固定测试日期:2023年10月5日14点30分(用于匹配格式) const testDate = new Date(2023, 9, 5, 14, 30); // 获取PHP兼容的日期格式 function getPhpDateFormat() { const dateStr = new Intl.DateTimeFormat('default', {dateStyle: 'short'}).format(testDate); // 匹配常见格式,可根据需求扩展 if (dateStr === '2023/10/05') return 'Y/m/d'; if (dateStr === '05.10.2023') return 'd.m.Y'; if (dateStr === '10/05/2023') return 'm/d/Y'; if (dateStr === '23/10/05') return 'y/m/d'; if (dateStr === '05.10.23') return 'd.m.y'; if (dateStr === '10/05/23') return 'm/d/y'; return 'Y-m-d'; // 默认 fallback } // 获取PHP兼容的时间格式 function getPhpTimeFormat() { const timeStr = new Intl.DateTimeFormat('default', {timeStyle: 'short'}).format(testDate); // 区分12小时制和24小时制 if (timeStr.includes('PM') || timeStr.includes('AM')) { return timeStr.includes(':') ? 'h:i A' : 'h A'; } else { return timeStr.includes(':') ? 'H:i' : 'H'; } return 'H:i'; // 默认 fallback } // 获取时区 const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; // 整理数据 const localeData = { timeZone: timeZone, dateFormat: getPhpDateFormat(), timeFormat: getPhpTimeFormat() };
2. 通过XMLHttpRequest传递数据到PHP
const xhr = new XMLHttpRequest(); xhr.open('POST', 'your-handler.php', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onload = function() { if (this.status >= 200 && this.status < 300) { console.log('数据传递成功'); } else { console.error('请求失败'); } }; xhr.send(JSON.stringify(localeData));
3. PHP端接收并使用数据
<?php // 接收JSON数据 $rawData = file_get_contents('php://input'); $localeData = json_decode($rawData, true); if ($localeData) { // 设置时区 date_default_timezone_set($localeData['timeZone']); // 使用获取到的格式格式化时间 $currentDate = date($localeData['dateFormat']); $currentTime = date($localeData['timeFormat']); echo "本地格式日期:{$currentDate}<br>"; echo "本地格式时间:{$currentTime}"; } else { echo '未接收到有效数据'; } ?>
注意事项
- 上述格式匹配逻辑覆盖了常见区域格式,若需支持更多小众格式,可扩展
getPhpDateFormat和getPhpTimeFormat中的判断规则。 - 固定测试日期是为了确保格式映射的准确性,避免不同日期导致的输出差异。
内容的提问来源于stack exchange,提问作者user21342916
相关产品推荐
相关产品推荐

