DST in JavaScript

本文关键字:JavaScript in DST | 更新日期: 2023-09-27 18:23:48

如何在JS文件中检查当前日期是否处于夏令时?

在C#中,有以下代码可用于检查这一点。有人能在JS中提出类似的代码吗?

var timezone = TimeZone.CurrentTimeZone
var tzById = TimeZoneInfo.FindSystemTimeZoneById(timezone.StandardName);
var localDate = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzById);

DST in JavaScript

让我们从您提供的C#代码开始。你有个bug。FindSystemTimeZoneById期望来自TimeZoneInfo对象的Id属性的值。您正在通过TimeZone对象的StandardName查找它,可能工作,但仅适用于某些时区,并且仅适用于英语语言系统。Id未本地化,但名称已本地化。实际上,您永远不应该使用TimeZone。只需使用TimeZoneInfo。如果您想要本地TimeZoneInfo,那么只需使用TimeZoneInfo.Local

但实际上,您刚刚编写了DateTime.Now的详细版本。您的代码不会执行其他任何操作。等效的JavaScript就是简单的new Date()

因此,您询问了如何确定当前日期是否在夏令时。我还假设你是指当地时区。在C#中,它只是DateTime.Now.IsDaylightSavingTime。在JavaScript中,这有点棘手。

有几种不同的方法,但这一种非常简单。有关详细说明,请参阅此网站。

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();
}

现在您可以检查new Date().dst并得到一个简单的真/假结果。