首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript -从当前日期获取一周的第一天

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

Stack Overflow用户
提问于 2010-11-12 00:06:28
回答 14查看 230.7K关注 0票数 193

我需要最快的方法来获得一周的第一天。例如:今天是11月11日,星期四;我想要这周的第一天,也就是11月8日,星期一。我需要最快的MongoDB地图函数的方法,有什么想法吗?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2010-11-12 00:13:14

使用Date对象的getDay方法,您可以知道一周中的第几天(可以是0=Sunday、1=Monday等)。

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

代码语言:javascript
复制
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
票数 374
EN

Stack Overflow用户

发布于 2010-11-12 00:19:32

不确定它的性能如何,但这是可行的。

代码语言:javascript
复制
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

或者作为一个函数:

代码语言:javascript
复制
# modifies _date_
function setToMonday( date ) {
    var day = date.getDay() || 7;  
    if( day !== 1 ) 
        date.setHours(-24 * (day - 1)); 
    return date;
}

setToMonday(new Date());
票数 60
EN

Stack Overflow用户

发布于 2018-08-19 22:05:28

CMS的答案是正确的,但假设星期一是一周的第一天。

钱德勒·兹沃勒的答案是正确的,但在日期原型上摆弄了一下。

其他以小时/分钟/秒/毫秒为单位的答案是错误的。

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

代码语言:javascript
复制
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)

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4156434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档