JavaScript - 从当前日期获取一周的第一天

INs*_*INs 140 javascript algorithm

我需要以最快的方式获得一周的第一天.例如:今天是11月11日,星期四; 我想要本周的第一天,也就是11月8日和星期一.我需要MongoDB地图功能最快的方法,任何想法?

CMS*_*CMS 279

使用getDayDate对象的方法,您可以知道星期几的数量(0 =星期日,1 =星期一等).

然后,您可以减去该天数加一,例如:

function getMonday(d) {
  d = new Date(d);
  var day = d.getDay(),
      diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
  return new Date(d.setDate(diff));
}

getMonday(new Date()); // Mon Nov 08 2010
Run Code Online (Sandbox Code Playgroud)

  • 如果星期日是一周的第一天,请使用:`diff = d.getDate() - day;` (11认同)
  • 这个函数有bug吗? - 如果有问题的日期是星期四,日= 4,差异= 2 - 4 + 1 = -1,则setDate的结果将是'前一个月的最后一天前一天'(见[this] (http://www.w3schools.com/jsref/jsref_setdate.asp)). (3认同)
  • 顺便说一句,d.setDate 是可变的,它改变了“d”本身 (3认同)
  • 谢谢,很好的例子 (2认同)
  • @Izhaki 你是什么意思?对于 5 月 2 日,该函数返回 4 月 29 日,这是正确的。 (2认同)
  • 感谢您的代码 @SMS 。为了在一周的第一天准确地获得 0 小时,我做了一些改动。`d.setHours(0); d.setMinutes(0); d.setSeconds(0);` (2认同)

use*_*716 49

不确定它如何比较性能,但这是有效的.

var today = new Date();
var day = today.getDay() || 7; // Get current day number, converting Sun. to 7
if( day !== 1 )                // Only manipulate the date if it isn't Mon.
    today.setHours(-24 * (day - 1));   // Set the hours to day number minus 1
                                         //   multiplied by negative 24
alert(today); // will be Monday
Run Code Online (Sandbox Code Playgroud)

或者作为一个功能:

function getMonday( date ) {
    var day = date.getDay() || 7;  
    if( day !== 1 ) 
        date.setHours(-24 * (day - 1)); 
    return date;
}

getMonday(new Date());
Run Code Online (Sandbox Code Playgroud)

  • 这很好,除了这个函数应该被称为"setToMonday",因为它修改了传入的日期对象.getMonday将返回一个新的日期,它是基于传入日期的星期一.一个微妙的区别,但是一个在使用后抓住我的这个功能.最简单的解决方法是将`date = new Date(date);`作为getMonday函数的第一行. (8认同)
  • 这应该是答案,它是回答问题的唯一答案.其他人有错误或推荐您到第三方图书馆. (4认同)
  • 这个答案是错误的,因为由于节省了白天,并非所有的一天都有24小时。它可能会意外更改日期的小时,甚至在某些情况下还会返回错误的日期。 (3认同)

Mat*_*att 13

查看Date.js

Date.today().previous().monday()
Run Code Online (Sandbox Code Playgroud)


Lio*_*rom 8

一周的第一天/最后一天

要从今天开始获取一周的第一天的日期,您可以使用以下方法:

function getUpcomingSunday() {
  const date = new Date();
  const today = date.getDate();
  const dayOfTheWeek = date.getDay();
  const newDate = date.setDate(today - dayOfTheWeek + 7);
  return new Date(newDate);
}

console.log(getUpcomingSunday());
Run Code Online (Sandbox Code Playgroud)

或者从今天开始获取一周的最后一天:

function getLastSunday() {
  const date = new Date();
  const today = date.getDate();
  const dayOfTheWeek = date.getDay();
  const newDate = date.setDate(today - (dayOfTheWeek || 7));
  return new Date(newDate);
}

console.log(getLastSunday());
Run Code Online (Sandbox Code Playgroud)

* 根据您的时区,一周的开始不必从星期日开始,它可以从星期五、星期六、星期一或您的机器设置的任何其他日期开始。这些方法将说明这一点。

* 您也可以使用如下toISOString方法对其进行格式化:getLastSunday().toISOString()


小智 6

var dt = new Date(); // current date of week
var currentWeekDay = dt.getDay();
var lessDays = currentWeekDay == 0 ? 6 : currentWeekDay - 1;
var wkStart = new Date(new Date(dt).setDate(dt.getDate() - lessDays));
var wkEnd = new Date(new Date(wkStart).setDate(wkStart.getDate() + 6));
Run Code Online (Sandbox Code Playgroud)

这样会很好用。


Lou*_*ine 6

CMS的答案是正确的,但假设星期一是一周的第一天。
钱德勒·兹沃勒(Chandler Zwolle)的回答是正确的,但摆弄了日期原型。
其他以小时/分钟/秒/毫秒为单位的答案是错误的。

下面的函数是正确的,并且将日期作为第一个参数,并将所需的一周的第一天作为第二个参数(0代表星期日,1代表星期一,依此类推)。注意:小时,分钟和秒设置为0以表示一天的开始。

function firstDayOfWeek(dateObject, firstDayOfWeekIndex) {

    const dayOfWeek = dateObject.getDay(),
        firstDayOfWeek = new Date(dateObject),
        diff = dayOfWeek >= firstDayOfWeekIndex ?
            dayOfWeek - firstDayOfWeekIndex :
            6 - dayOfWeek

    firstDayOfWeek.setDate(dateObject.getDate() - diff)
    firstDayOfWeek.setHours(0,0,0,0)

    return firstDayOfWeek
}

// August 18th was a Saturday
let lastMonday = firstDayOfWeek(new Date('August 18, 2018 03:24:00'), 1)

// outputs something like "Mon Aug 13 2018 00:00:00 GMT+0200"
// (may vary according to your time zone)
document.write(lastMonday)
Run Code Online (Sandbox Code Playgroud)


1ns*_*nct 5

我正在用这个

function get_next_week_start() {
   var now = new Date();
   var next_week_start = new Date(now.getFullYear(), now.getMonth(), now.getDate()+(8 - now.getDay()));
   return next_week_start;
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*cos 5

返回周一上午 00 点至周一上午 00 点。

const now = new Date()
const startOfWeek = new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() + 1)
const endOfWeek = new Date(now.getFullYear(), now.getMonth(), startOfWeek.getDate() + 7)
Run Code Online (Sandbox Code Playgroud)