获取上周一的Javascript

时间:2016-01-29 15:27:08

标签: javascript

请有人帮忙进行一些编码。基本上我希望上周一出现在用户输入今天日期的字段中 例如:如果输入今天的日期(29-Jan-16),那么编码将使下一个星期一的日期显示为(25-Jan-16)

我在网上看到了一些代码:

function getPreviousMonday()
{
    var date = new Date();
    if(date.getDay() != 0)
        return new Date().setDate(date.getDate()-7-6);
    else
        return new Date().setDate(date.getDate()-date.getDate()-6);
}

然而,这并不是很有效。

8 个答案:

答案 0 :(得分:21)

var prevMonday = new Date();
prevMonday.setDate(prevMonday.getDate() - (prevMonday.getDay() + 6) % 7);

我有点晚了,但我喜欢这个解决方案。这是一个单一的班轮而不是那么复杂。为此制作一个功能对我来说似乎有点过分了。

答案 1 :(得分:4)

我认为你的数学有点偏差,我整理了你的语法;

function getPreviousMonday()
{
    var date = new Date();
    var day = date.getDay();
    var prevMonday;
    if(date.getDay() == 0){
        prevMonday = new Date().setDate(date.getDate() - 7);
    }
    else{
        prevMonday = new Date().setDate(date.getDate() - day);
    }

    return prevMonday;
}

这样你总能得到发生的最后一个星期一(如果今天是星期一,那就是7天前)

答案 2 :(得分:1)

使用moment.js:

moment().day("Monday").format('YYYY-MM-DD');

答案 3 :(得分:0)

以下是展示几种不同格式的小提琴: https://jsfiddle.net/umefez2j/3/

function getMonday(d) {
  var m_names = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
  var d = new Date(d);
  var day = d.getDay(),
      diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday

  //Use this one to return this format: Mon Jan 25 2016 09:37:51 GMT-0600 (Central Standard Time)
  //return new Date(d.setDate(diff));

  //Use this one to return this format: Mon, 25 Jan 2016
  //monday=new Date(d.setDate(diff)).toUTCString();
  //monday=monday.split(' ').slice(0, 4).join(' ')
  //return monday;

  //Use this one to return this format: 25-Jan-2016
  monday=new Date(d.setDate(diff));
  var curr_date = monday.getDate();
  var curr_month = monday.getMonth();
  var curr_year = monday.getFullYear();
  return curr_date + "-" + m_names[curr_month] + "-" + curr_year;
}

alert(getMonday(new Date()));

//Created with help from:
//http://stackoverflow.com/a/27480352/3112803
//http://stackoverflow.com/a/4156516/3112803
//http://stackoverflow.com/a/27869948/3112803

答案 4 :(得分:0)

感谢@PhilippeDubé-Tremblay(上方)为您提供的不错的解决方案,

对于那些像我一样计划重复调用此功能的人,我将在此处放置包装功能。

// Accepts a date as parameter or with no parameter will assume the current date.
const getPreviousMonday = (date = null) => {
  let prevMonday = date && new Date(date.valueOf()) || new Date()
  prevMonday.setDate(prevMonday.getDate() - (prevMonday.getDay() + 6) % 7)
  return prevMonday
}

答案 5 :(得分:0)

基于@PhilippeDubé-Tremblay的答案,我想提出一些可以让您针对前一天的目标的东西:

let target = 1 // Monday
let date = new Date()
date.setDate(date.getDate() - ( date.getDay() == target ? 7 : (date.getDay() + (7 - target)) % 7 ))

如果今天也是星期一,则考虑到前一个星期一

答案 6 :(得分:0)

上述解决方案对我不起作用。

在@Philippe Dubé-Tremblay 的解决方案中,如果今天已经是星期一,它将在同一天返回!

function getPreviousMonday() : Date {
    let date = new Date();
    let day = date.getDay();
    let prevMonday = new Date();
    if(day == 0 || day == 1){
         prevMonday.setDate(date.getDate() - (day + 6));
    }
    else{
        prevMonday.setDate(date.getDate() - (day - 1));
    }
    return prevMonday;
}

 if (day == 1) {
  prevMonday.setDate(date.getDate() - 7);
}
else {
  prevMonday.setDate(date.getDate() - (day + 6) % 7);;
}

这对我有用!

答案 7 :(得分:-1)

最简单的解决方案是根据今天的日期返回天数。例如,如果今天(0)是星期日,您可以返回6天查找上一个星期一。如果今天是星期一,你可以回去7天。因此,使用模数将在这种情况下帮助您,因为您需要返回的天数是%7加6。 让我简单地分解一下。

var today=new Date();

这将为您提供今天的约会。现在,

var todaysDay=today.getDay();

这将为您提供从零开始的一天。

var goBack=today.getDay()%7+6;

现在,宣布一个新的日期。

var lastMonday=new Date().setDate(today.getDate()-goBack);

现在,这将为您提供数字日期值。将其转换回日期

var desiredDate=new Date(lastMonday);