如何使用Keith Wood jQuery Countdown获取服务器端午夜时间?
解决从服务器端获取午夜时间给jQuery Countdown的问题
我来帮你搞定这个问题!你之前的尝试之所以失败,是因为把PHP输出的日期字符串直接用引号包裹赋值给了变量,而JavaScript的Date构造函数需要的是数值参数或者时间戳,不是带引号的字符串。下面给你两种可靠的实现方式:
方法1:使用Unix时间戳(推荐,避免时区解析歧义)
PHP端先获取明天午夜的Unix时间戳(注意PHP的时间戳是秒级,而JS是毫秒级,所以要乘以1000):
<?php // 设置服务器时区(根据你的业务需求调整,比如Asia/Shanghai) date_default_timezone_set('Asia/Shanghai'); // 获取明天午夜的Unix时间戳(秒) $midnightTimestamp = strtotime('tomorrow'); ?>
然后在JS中直接用这个时间戳创建Date对象:
// 把PHP输出的秒级时间戳转成JS需要的毫秒级 var midnight = new Date(<?= $midnightTimestamp ?> * 1000); $('#defaultCountdown').countdown({ until: midnight, format: 'HMS', padZeroes: true, compact: true });
方法2:直接输出Date构造所需的数值参数
这种方式是直接把年、月、日、时、分、秒作为数值传递给JS的Date构造函数,注意JS的月份是从0开始的(比如4月对应3),所以PHP输出月份时要减1:
<?php date_default_timezone_set('Asia/Shanghai'); // 输出格式:年, 月份(0-11), 日, 时, 分, 秒 // 明天午夜是0点0分0秒,所以直接固定为0,0,0 $midnightParams = date("Y, n-1, j, 0, 0, 0", strtotime('tomorrow')); ?>
JS中直接使用这些参数创建Date对象:
// 这里不需要引号,直接把PHP输出的数值参数传给Date构造函数 var midnight = new Date(<?= $midnightParams ?>); $('#defaultCountdown').countdown({ until: midnight, format: 'HMS', padZeroes: true, compact: true });
关键注意事项
- 一定要确保PHP的时区设置正确,否则
strtotime('tomorrow')会基于服务器时区计算,可能和用户预期的午夜时间不符。 - 避免直接传递日期字符串给
Date构造函数,不同浏览器对字符串格式的解析可能存在差异,容易出现兼容性问题。
内容的提问来源于stack exchange,提问作者VickyPopovic
相关产品推荐
相关产品推荐

