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

如何使用jQuery将UNIX时间戳转换为Jalali日历日期并在标签显示

jQuery 实现 Unix 时间戳转 Jalali 日期渲染方案

实现逻辑

整体流程分3部分:

  • 把Unix时间戳存在标签的自定义data-timestamp属性上,和渲染逻辑解耦
  • 内置公历转Jalali(波斯历)的核心算法,不需要额外引入第三方库
  • 页面加载完成后,jQuery遍历所有带时间戳属性的标签,格式化后插入到标签内部,输出严格匹配YYYY/MM/DD HH:mm:ss格式

完整实现代码

1. HTML 结构示例

时间戳直接写在data-timestamp属性上,给需要渲染日期的标签加统一的class方便选择:

<span class="persian-date" data-timestamp="1623940540"></span>
<p class="persian-date" data-timestamp="1672531200"></p>

注意:默认示例里的时间戳是秒级Unix时间戳,如果你存的是毫秒级,后面JS代码里去掉* 1000的换算逻辑即可。

2. JS 逻辑(依赖jQuery)

把下面代码放在页面jQuery引入之后即可:

// 公历转Jalali核心算法
function gregorianToJalali(gy, gm, gd) {
  let g_d_m = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
  let jy = (gy <= 1600) ? 0 : 979;
  gy = (gy <= 1600) ? gy - 621 : gy - 1600;
  let gy2 = (gm > 2) ? (gy + 1) : gy;
  let days = (365 * gy) + (Math.floor((gy2 + 3) / 4)) - (Math.floor((gy2 + 99) / 100)) + (Math.floor((gy2 + 399) / 400)) - 80 + gd + g_d_m[gm - 1];
  jy += 33 * (Math.floor(days / 12053));
  days %= 12053;
  jy += 4 * (Math.floor(days / 1461));
  days %= 1461;
  if (days > 365) {
    jy += Math.floor((days - 1) / 365);
    days = (days - 1) % 365;
  }
  let jm = (days < 186) ? 1 + Math.floor(days / 31) : 7 + Math.floor((days - 186) / 30);
  let jd = 1 + ((days < 186) ? (days % 31) : ((days - 186) % 30));
  return [jy, jm, jd];
}

// 补零工具,保证月/日/时/分/秒都是两位
function padZero(num) {
  return num < 10 ? '0' + num : num;
}

// 页面加载完成后执行渲染
$(function() {
  // 遍历所有带persian-date类的标签
  $('.persian-date').each(function() {
    const $el = $(this);
    // 读取标签上的时间戳
    const timestamp = parseInt($el.data('timestamp'), 10);
    if (!timestamp) return;
    
    // 时间戳转公历日期对象,秒级时间戳乘1000转毫秒
    const date = new Date(timestamp * 1000);
    // 拆分公历年月日
    const gYear = date.getFullYear();
    const gMonth = date.getMonth() + 1;
    const gDay = date.getDate();
    // 转Jalali年月日
    const [jYear, jMonth, jDay] = gregorianToJalali(gYear, gMonth, gDay);
    // 取时分秒
    const hours = padZero(date.getHours());
    const minutes = padZero(date.getMinutes());
    const seconds = padZero(date.getSeconds());
    
    // 拼接成要求的格式 1400/03/18 18:35:40
    const formatted = `${jYear}/${padZero(jMonth)}/${padZero(jDay)} ${hours}:${minutes}:${seconds}`;
    // 插入到标签内部
    $el.text(formatted);
  });
});

效果验证

比如时间戳1623940540对应公历2021-06-17 18:35:40,转换后输出的Jalali日期正好是1400/03/18 18:35:40,完全匹配要求的格式。

内容的提问来源于stack exchange,提问作者Mahan Parsa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:21:59