JavaScript时间 var today=新日期(); jQuery(函数(){ var preferences_clock_hide=isPreferenceOn('preferences_clock'); 如果(!首选项\u时钟\u隐藏){ if(今日.dst()){ jQuery('.server time').countdown({since:new Date({/literal}{$smarty.now{Date|格式:“%Y,%m-1,%d”}{literal}),compact:true,格式:'HMS',时区:-4}); }否则{ jQuery('.server time').countdown({自:新日期({/literal}{$smarty.now{Date|u格式:“%Y,%m-1,%d”}{literal}),压缩:true,格式:'HMS',时区:-5}); } } }); Date.prototype.stdtTimeZoneOffset=函数(){ var jan=新日期(this.getFullYear(),0,1); var jul=新日期(this.getFullYear(),6,1); 返回Math.max(jan.getTimezoneOffset(),jul.getTimezoneOffset()); } Date.prototype.dst=函数(){ 返回此.getTimezoneOffset()

JavaScript时间 var today=新日期(); jQuery(函数(){ var preferences_clock_hide=isPreferenceOn('preferences_clock'); 如果(!首选项\u时钟\u隐藏){ if(今日.dst()){ jQuery('.server time').countdown({since:new Date({/literal}{$smarty.now{Date|格式:“%Y,%m-1,%d”}{literal}),compact:true,格式:'HMS',时区:-4}); }否则{ jQuery('.server time').countdown({自:新日期({/literal}{$smarty.now{Date|u格式:“%Y,%m-1,%d”}{literal}),压缩:true,格式:'HMS',时区:-5}); } } }); Date.prototype.stdtTimeZoneOffset=函数(){ var jan=新日期(this.getFullYear(),0,1); var jul=新日期(this.getFullYear(),6,1); 返回Math.max(jan.getTimezoneOffset(),jul.getTimezoneOffset()); } Date.prototype.dst=函数(){ 返回此.getTimezoneOffset(),javascript,jquery,time,Javascript,Jquery,Time,如果我们在DST中,这段代码应该会更改时间,但是显然.DST()不为真,尽管我们现在在DST中。这可能是个小错误,但我希望你们能帮助我 另外,我是新来这里问问题的,所以我不知道元。对不起 先谢谢你 编辑:我将代码更改为:` var today = new Date(); jQuery(function () { var preferences_clock_hide = isPreferenceOn('preferences_clock'); if

如果我们在DST中,这段代码应该会更改时间,但是显然.DST()不为真,尽管我们现在在DST中。这可能是个小错误,但我希望你们能帮助我

另外,我是新来这里问问题的,所以我不知道元。对不起

先谢谢你

编辑:我将代码更改为:`

var today = new Date();
        jQuery(function () {
        var preferences_clock_hide = isPreferenceOn('preferences_clock');
        if (!preferences_clock_hide) {
            if(today.dst()){
            jQuery('.server-time').countdown({since: new Date({/literal}{$smarty.now|date_format:"%Y, %m-1, %d"}{literal}), compact: true, format: 'HMS', timezone: -4});
        }else{
            jQuery('.server-time').countdown({since: new Date({/literal}{$smarty.now|date_format:"%Y, %m-1, %d"}{literal}), compact: true, format: 'HMS', timezone: -5});
        }
    }
});
        Date.prototype.stdTimezoneOffset = function() {
            var jan = new Date(this.getFullYear(), 0, 1);
            var jul = new Date(this.getFullYear(), 6, 1);
            return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
        }

        Date.prototype.dst = function() {
            return this.getTimezoneOffset() < this.stdTimezoneOffset();
        }
var today=新日期();
Date.prototype.stdtTimeZoneOffset=函数(){
var jan=新日期(this.getFullYear(),0,1);
var jul=新日期(this.getFullYear(),6,1);
返回Math.max(jan.getTimezoneOffset(),jul.getTimezoneOffset());
}
Date.prototype.dst=函数(){
返回此.getTimezoneOffset()
当我在控制台中测试它时,today.dst()返回true,但是时区由于某种原因没有改变

编辑2:
出于某种原因,今天.dst()是正确的,但代码在else中。

不是专家,我不知道您在这方面想做什么

var today = new Date();
Date.prototype.stdTimezoneOffset = function() {
    var jan = new Date(this.getFullYear(), 0, 1);
    var jul = new Date(this.getFullYear(), 6, 1);
    return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
}

Date.prototype.dst = function() {
    return this.getTimezoneOffset() < this.stdTimezoneOffset();
}
jQuery(function () {
        if(today.dst()) {
            jQuery('.server-time').countdown({
                since: new Date({/literal}{$smarty.now|date_format:"%Y, %m-1, %d"}{literal}), 
                compact: true, 
                format: 'HMS', 
                timezone: -4
                });
        }else{
            jQuery('.server-time').countdown({
                since: new Date({/literal}{$smarty.now|date_format:"%Y, %m-1, %d"}{literal}), 
                compact: true, 
                format: 'HMS', 
                timezone: -5
            });
        }
});
`
但是你能试试这个吗:

jQuery('.server-time').countdown({since: new Date({/literal}{$smarty.now|date_format:"%Y, %m-1, %d"}{literal}), compact: true, format: 'HMS', timezone: -4});
这两个函数都将返回相同的值,因为在返回UTC和本地时间之间时区差的两个函数中都使用getTimezoneOffset

var jan = new Date(this.getFullYear(), 0, 1);
var jul = new Date(this.getFullYear(), 6, 1);
console.log(Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()));
return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
返回this.getTimezoneOffset()
由于同样的原因,这将返回FALSE,getTimezoneOffset在这两个函数中都使用,对于我来说,我有-60分钟,所以结果是-60<-60,这是FALSE
我希望这有帮助

@Niroda建议使用rigth代码。问题在于变量的可见性范围

据我所知,JavaScript在2次迭代中读取代码——第一次它记住代码(仅用于变量名称,但包括函数内容)并扫描错误,第二次它设置变量值并运行代码

如果在Axis
函数functionName(…){…}
中使用默认函数,则可以将其放在代码的任何部分中,因为JS记住了一个函数,所以该函数将正常工作

但是如果您使用变量选项
functionName=function(…){…}
,那么JS将记住变量名,但它不知道它是一个函数,并且在今天运行代码时。dst()
在第一次迭代时等于
未定义的
,只有在第二次迭代时(运行此行上的所有内容后)它将设置为函数

因此,如果您在单击时使用相同的代码,它将是确定的,但是现在您的
if
语句在初始化此函数之前检查函数结果


希望您能收到。

1)谢谢您的回复2)它实际上没有给我一个错误3)现在dst应该是正确的,但出于某些原因它返回了错误谢谢您的回答,它总体上确实帮助了我。但由于某些原因,尼罗达的代码不起作用。
var jan = new Date(this.getFullYear(), 0, 1);
var jul = new Date(this.getFullYear(), 6, 1);
console.log(Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()));
return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
return this.getTimezoneOffset() < this.stdTimezoneOffset();