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

如何将基于时间的JavaScript代码转换为PHP?新手求助纠错

JavaScript转PHP时间处理代码修复

原JavaScript代码的核心逻辑是:获取当前时间的毫秒级时间戳,再获取当日14:13:00的毫秒级时间戳,最后计算两者的时间差。下面针对你写的PHP代码中的错误进行修复:

错误分析

  1. PHP无原生Date类:你使用了JS风格的new Date(),PHP中应该用DateTime类。
  2. 对象方法调用语法错误:PHP中访问对象方法用->而非.,比如$d->format('Y')而非$d.getFullYear()。
  3. date()函数参数缺失:date()需要传入格式参数,若要获取时间戳,直接用time()更合适。
  4. mktime()参数顺序错误:该函数的参数顺序为mktime(时, 分, 秒, 月, 日, 年),你颠倒了年、月、日和时分秒的位置。

修复后的PHP代码

方法一:使用DateTime类(推荐,更直观)

// 获取当前时间的毫秒级时间戳,对应JS的getTime()
$now = (new DateTime())->getTimestamp() * 1000;

// 获取当日14:13:00的DateTime对象
$ctdrDateTime = new DateTime('today 14:13:00');
// 转换为毫秒级时间戳
$ctdr = $ctdrDateTime->getTimestamp() * 1000;

// 计算时间差(毫秒)
$distance = $ctdr - $now;

方法二:使用传统时间函数

// 当前秒级时间戳,转毫秒
$now = time() * 1000;

// 获取当前日期的年、月、日
$year = date('Y');
$month = date('n'); // n表示不带前导零的月份(1-12),对应JS的getMonth()+1(JS月份是0-11)
$day = date('j'); // j表示不带前导零的日期(1-31)

// 构造当日14:13:00的时间戳,注意mktime参数顺序:时,分,秒,月,日,年
$ctdrTimestamp = mktime(14, 13, 0, $month, $day, $year);
// 转毫秒级时间戳
$ctdr = $ctdrTimestamp * 1000;

// 计算时间差
$distance = $ctdr - $now;

注意:JS的getMonth()返回0-11(对应1-12月),而PHP中date('n')直接返回1-12的月份,无需额外处理,这是两者的关键差异点。

内容的提问来源于stack exchange,提问作者Prabhu Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:40:28