请有人帮忙进行一些编码。基本上我希望上周一出现在用户输入今天日期的字段中
例如:如果输入今天的日期(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);
}
然而,这并不是很有效。
答案 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);