JavaScript 计算一年中的某一天 (1 - 366)

2022-08-30 02:38:59

如何使用 JavaScript 计算一年中从 1 到 366 的那一天?

例如:

  • January 3应该是 。3
  • February 1应该是 。32

答案 1

以下OP的编辑:

var now = new Date();
var start = new Date(now.getFullYear(), 0, 0);
var diff = now - start;
var oneDay = 1000 * 60 * 60 * 24;
var day = Math.floor(diff / oneDay);
console.log('Day of year: ' + day);

编辑:当日期在3月26日至10月29日之间并且时间早于凌晨1点(例如00:59:59)时,上述代码将失败。这是由于代码未考虑夏令时。您应该对此进行补偿nownow

var now = new Date();
var start = new Date(now.getFullYear(), 0, 0);
var diff = (now - start) + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);
var oneDay = 1000 * 60 * 60 * 24;
var day = Math.floor(diff / oneDay);
console.log('Day of year: ' + day);

答案 2

这适用于所有国家/地区的夏令时更改(上面的“中午”在澳大利亚不起作用):

Date.prototype.isLeapYear = function() {
    var year = this.getFullYear();
    if((year & 3) != 0) return false;
    return ((year % 100) != 0 || (year % 400) == 0);
};

// Get Day of Year
Date.prototype.getDOY = function() {
    var dayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
    var mn = this.getMonth();
    var dn = this.getDate();
    var dayOfYear = dayCount[mn] + dn;
    if(mn > 1 && this.isLeapYear()) dayOfYear++;
    return dayOfYear;
};