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

使用WooCommerce get_date_on_sale_to()实现JS倒计时器报错修复

修复WooCommerce促销倒计时器的NaN问题

嘿,我来帮你搞定这个倒计时器的问题!你遇到的NaN d NaN h NaN m NaN s错误,核心原因很明确,咱们一步步解决:

问题根源

你当前的代码里,这一行存在关键语法错误:

var countDownDate = new Date(<?php echo $product->get_date_on_sale_to(); ?>).getTime();

PHP输出的日期是"2018-01-25T00:00:00-01:00",但直接裸写进JS后,会变成:

new Date(2018-01-25T00:00:00-01:00)

JS会把这个当成数学表达式来计算,而不是日期字符串,自然无法生成有效的Date对象,getTime()就会返回NaN,导致后续所有计算都变成NaN。

修复方案

方案1:给日期字符串添加引号(最简单的修复)

只需要给PHP输出的内容加上双引号,让它成为JS的合法字符串参数:

var countDownDate = new Date("<?php echo $product->get_date_on_sale_to(); ?>").getTime();

这样JS就能正确识别这是一个ISO格式的日期字符串,生成有效的Date对象。

方案2:直接传递时间戳(兼容性更好)

如果你的网站需要兼容旧浏览器(比如IE11及更早),这些浏览器对带时区偏移的ISO日期解析支持不好,推荐用PHP把日期转换成Unix时间戳,再传给JS:

<?php 
// 将促销结束日期转成Unix时间戳(秒),乘以1000转换成JS需要的毫秒时间戳
$sale_end_timestamp = strtotime($product->get_date_on_sale_to()) * 1000;
?>
<script>
var countDownDate = <?php echo $sale_end_timestamp; ?>;
var x = setInterval(function() {
    var now = new Date().getTime();
    var distance = countDownDate - now;
    var days = Math.floor(distance / (1000 * 60 * 60 * 24));
    var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
    var seconds = Math.floor((distance % (1000 * 60)) / 1000);
    
    document.getElementById("demo").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";
    
    if (distance < 0) {
        clearInterval(x);
        document.getElementById("demo").innerHTML = "EXPIRED";
    }
}, 1000);
</script>

这种方式跳过了JS的日期解析步骤,直接用时间戳计算,兼容性和可靠性都更强。

额外优化:避免空值报错

如果产品没有设置促销结束日期,get_date_on_sale_to()会返回空值,可能导致JS报错。可以先判断是否有促销日期再渲染代码:

<?php if ($sale_end_date = $product->get_date_on_sale_to()) : ?>
<script>
var countDownDate = <?php echo strtotime($sale_end_date) * 1000; ?>;
// 倒计时逻辑...
</script>
<?php endif; ?>

内容的提问来源于stack exchange,提问作者Esmaeil Badri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:40