【问题标题】:How to get first date and last date of the week from week number and year?如何从周数和年份获取一周的第一个日期和最后一个日期?
【发布时间】:2012-01-10 12:18:22
【问题描述】:

在 JavaScript 中,我只想按周数和年份获取一周的第一个日期和一周的最后一个日期。

例如,如果我的输入是:

2(week),2012

那么我的输出应该是:

2012-01-08 and 2012-01-14

【问题讨论】:

  • 2013 年我给 2 怎么样?它应该返回什么?
  • 它应该返回第一个日期和最后一个日期的第二周......
  • @balaphp 实际上它将返回 2013 年第 2 周的第一个和最后一个日期......我是对的。 ?

标签: javascript jquery


【解决方案1】:

试试这个:

var year = 2012;
var week = 2;
var d = new Date("Jan 01, " + year + " 01:00:00");
var w = d.getTime() + 604800000 * (week - 1);
var n1 = new Date(w);
var n2 = new Date(w + 518400000)

console.log(n1);
console.log(n2);

n1 包含一周的第一天
n2 包含一周的最后一天

关于常量:
604800000 是以毫秒为单位的一周
518400000是六天

【讨论】:

  • 不正确,n1 不一定是星期一,n2 不一定是星期日。
  • new Date("Jan 01, " + year + " 01:00:00") 是创建日期为 1 月 1 日的糟糕方法,因为它依赖于具有不受支持的字符串格式的内置解析器。将小时设置为 1 似乎没有必要。 new Date(year, 0) 更短且更受欢迎。 1 天、一周内的毫秒数,无论在哪里观察到夏令时都不一致。
【解决方案2】:

对@bardiir 的回答稍作改动, 如果一年的第一天不是星期日(或星期一),则结果不正确。 你应该减去第一天的数字。

更改代码

firstDay = new Date(2015, 0, 1).getDay();
console.log(firstDay);
var year = 2015;
var week = 67;
var d = new Date("Jan 01, " + year + " 01:00:00");
var w = d.getTime() - (3600000 * 24 * (firstDay - 1)) + 604800000 * (week - 1)
var n1 = new Date(w);
var n2 = new Date(w + 518400000)

console.log(n1.toString());
console.log(n2.toString());

如果您希望第一个是星期日,请将 (firstDay-1) 更改为 firstDay

【讨论】:

  • new Date("Jan 01, " + year + " 01:00:00") 是不明智的,因为它依赖于内置解析器和不受支持的格式。 new Date(year, 0) 是等价的、可靠的并且输入更少。并非所有的日子都是 24 小时,因此可以观察到夏令时,因此结果有时可能会出错。此答案还假设周编号从 1 月 1 日开始,在许多情况下并非如此,并返回 2022 年 4 月 5 日星期二到 2022 年 4 月 11 日星期一这样的周。
【解决方案3】:

您可以通过以下链接查看并尝试。

How to get first and last day of the week in JavaScript

可能对你有帮助。

谢谢。

【讨论】:

  • 我已经检查过了。它按日期返回值,但我希望按周数和年份获得相同的结果...
【解决方案4】:

更改之前的答案并说清楚。 @巴迪尔

// give the year and week
let year = 2021;
let week = 1;

// first date of year
let firstDateOfYear = new Date(year, 0, 1);
// get the day of first date in the year
let firstDayOfYear = firstDateOfYear.getDay();
console.log("first day of year", firstDayOfYear);

let timeofOneDay = 60 * 60 * 24 * 1000;
let timeofOneWeek = 60 * 60 * 24 * 7 * 1000;
// last day of the week, 6 days later
let timeof6Day = 60 * 60 * 24 * 6 * 1000;

// if week start from Monday
let timeOfFirstDay = firstDateOfYear.getTime() - (timeofOneDay * (firstDayOfYear - 1)) + timeofOneWeek * (week - 1);
let timeOfLastDay = timeOfFirstDay + timeof6Day;
console.log("week start from Monday");
console.log(new Date(timeOfFirstDay).toString());
console.log(new Date(timeOfLastDay).toString());

// if week from Sunday
timeOfFirstDay = firstDateOfYear.getTime() - (timeofOneDay * (firstDayOfYear - 0)) + timeofOneWeek * (week - 1);
timeOfLastDay = timeOfFirstDay + timeof6Day;
console.log("week start from Sunday");
console.log(new Date(timeOfFirstDay).toString());
console.log(new Date(timeOfLastDay).toString());

【讨论】:

    【解决方案5】:
       dt = new Date();
       var firstDateOfWeek=(dt.setDate(dt.getDate()-dt.getDay()));
       var lastDateOfWeek=(dt.setDate(dt.getDate()+6-dt.getDay()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2021-12-07
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多