如何将基于时间的JavaScript代码转换为PHP?新手求助纠错
JavaScript转PHP时间处理代码修复
原JavaScript代码的核心逻辑是:获取当前时间的毫秒级时间戳,再获取当日14:13:00的毫秒级时间戳,最后计算两者的时间差。下面针对你写的PHP代码中的错误进行修复:
错误分析
- PHP无原生
Date类:你使用了JS风格的new Date(),PHP中应该用DateTime类。 - 对象方法调用语法错误:PHP中访问对象方法用
->而非.,比如$d->format('Y')而非$d.getFullYear()。 date()函数参数缺失:date()需要传入格式参数,若要获取时间戳,直接用time()更合适。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
相关产品推荐
相关产品推荐

