You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:47:38