JavaScript time
JavaScript time
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();
}
如果我们在 DST 中,这段代码应该改变时间,但显然 .dst() 不会实现,尽管我们现在处于 DST。这可能是一个小错误,但我希望你们能帮助我。
附言我是在这里提问的新手,所以我不知道元。对不起。
提前谢谢你。
编辑:我将代码更改为:'
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
});
}
});
`
当我在控制台中测试它时,today.dst() 返回 true,但由于某种原因时区没有改变。
编辑2:出于某种原因,今天 .dst() 是正确的,但代码在 else 中。
@Niroda建议使用严谨的代码。问题出在变量的可见性范围内。
据我所知,JavaScript在 2 次迭代中读取代码 - 第一次它记住代码(仅适用于变量名称,但包括函数内容)并扫描错误,第二次 - 它设置变量的值并运行代码。
如果您使用默认函数 sintaxis function functionName(...) {...}
那么您可以将其放在代码的任何部分,它将起作用,因为 JS 记住了一个函数
但是如果你使用变量选项functionName = function(...) {...}
那么 JS 会记住变量名,但它不知道它是一个函数,并且在运行代码时today.dst()
第一次迭代时等于 undefined
,只有在第二次迭代时(在运行所有内容后,这一行更高)它会将其设置为函数。
因此,如果您在单击时使用相同的代码,则可以,但是现在您的语句if
在初始化此函数之前检查函数结果。
希望你明白了。
不是专家,我不知道你在这一行想做什么
jQuery('.server-time').countdown({since: new Date({/literal}{$smarty.now|date_format:"%Y, %m-1, %d"}{literal}), compact: true, format: 'HMS', timezone: -4});
但是你能试试这个:
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 () {
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
});
}
});
如果您检查控制台,您将看到此错误:today.dst不是一个函数
编辑:对不起英语不好,我不能很好地解释它,只需检查@Undefine答案它解释了一切只需使用浏览器工具调试代码,您就可以看到为什么没有得到预期的结果。
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());
两者都将返回相同的值,因为您在两个函数中使用 getTimezoneOffset 返回 UTC 和本地时间之间的时区差异。
return this.getTimezoneOffset() < this.stdTimezoneOffset();
出于同样的原因,这将返回 FALSE,两者都使用了 getTimezoneOffset 对我来说,我有 -60 分钟,所以结果是 -60 <-60,这是假的我希望这有所帮助!
- Javascript Date() object with NULL Time
- javascript time EST/CST
- Javascript if/else工作不正常[Time Formatting AM/PM]
- Javascript Time问题不认为我介于startTime和endTime之间
- JavaScript time
- 在javascript中解析MySQL TIME
- HTML5 input=time 不会通过 javascript 设置
- Javascript - Time Return Attribute
- 尝试使用 d3.time.format 格式化日期时,我收到 JavaScript 错误“d.getMonth 不是一个
- JavaScript DateTimePicker 返回错误的 unix time
- time javascript
- Javascript 将 Datetime 转换为 Time
- Javascript setTimeout multiple and ajax and waiting time
- Google 日历 API v3 calendar.events.list 并在 javascript 中使用 time
- 如何在javascript中将字符串转换为Time
- Ruby Time to JavaScript Date in Chrome/Firefox
- 如何用Epoch Time替换JavaScript中的ObjectId
- 使用 User Current Time JavaScript 更改 CSS
- 使用 Get Time Javascript 更改样式 CSS
- 比较日期&Time Javascript