我正在使用phonegap localNotifications插件,该插件指定我可以设置每周发布的通知。
但是,javascript日期对象似乎只有.getDay()
而不是.setDay()
。
我有一个json对象,我想要重复一周的日子,
set_days = {"mon":false, "tues":true,"wed":false,"thurs":true...}
你如何在javascript中设置一天?因为它正在设置通知,所以这一天必须在将来,所以我不想得到最近的“周三”,而只是下一个“周三”。
这是插件的链接,但我认为这不是特定于插件的。
答案 0 :(得分:37)
如何在javascript中设置一天?
你的意思是,在本周?一周什么时候开始?
假设它在星期日开始(如getDay
:0 - 星期日,1 - 星期一等),这将有效:
var date, daytoset; // given: a Date object and a integer representing the week day
var currentDay = date.getDay();
var distance = daytoset - currentDay;
date.setDate(date.getDate() + distance);
要在接下来的7天内将日期设置为工作日,请使用:
var distance = (daytoset + 7 - currentDay) % 7;
答案 1 :(得分:0)
这是一个已经完成的答案,但是我找到了一个想与您分享的解决方案。
我不擅长更新Date之类的JS对象,因此我没有提供用于实现Date.proptype.setDay
的完整解决方案,但是这里的想法是:
// Get a day of the current week
// Example "Get Monday" : getWeekDay({day:1})
// Args:
// - day {Number} Same format that Date.getDay() > Sunday - Saturday : 0 - 6
// - inWeeks {Number} Number of week relative to current, -1: Previous week, 1: Next week, 2: in 2 weeks
// - date {Date} Use this date instead of now to get relative current week
// - atMidnight {Bool} Force result date to be at 00:00:00:00 (instead of keeping current/date time)
/*export*/ const getWeekDay = ({
day, inWeeks=0,
date,
atMidnight=false, // Force days to be at 00:00:00:00
}={}) => {
date = date ? new Date(date) : new Date(); // Loose ref if exist, or take now
day = (typeof day !== 'number' && typeof day !== 'string')
? date.getDay()
: day;
date.setDate(date.getDate() + inWeeks * 7 + (day - date.getDay()));
if (atMidnight) {
date.setHours(0,0,0,0);
}
return date;
};
// Same that getWeekDay
// but return an array of all days in the week [Sunday, Monday, .. Saturday]
// Instead of one single day
// Additional Args:
// - days: Array of day: {Number} Same format that Date.getDay() > Sunday - Saturday : 0 - 6
/*export*/ const getWeekDays = ({
days = [ ...Array(7).keys() ],
...args
}) => days.map(day => getWeekDay({...args, day}));
// Demo:
let wed = getWeekDay({inWeek:1, day:3})
console.log("The next Wednesday is: " + wed);
console.log("The next one (at midgnight): " + getWeekDay({date: wed, inWeeks:1, atMidnight:true}));
console.log("All days 2 weeks ago: " + getWeekDays({inWeeks:-2}));
console.log("Only Monday and Wednesday next week: " + getWeekDays({inWeeks:1, days:[1,3]}));
附加说明
如果您确实不想要删除引用并更新以arg形式发送的date
,则可以替换以下行:
date = date ? new Date(date) : new Date(); // Loose ref if exist, or take now
作者:
date = date ? date : new Date(); // KEEP ref if exist in order to update original, or take now
答案 2 :(得分:-4)
您是否正在创建要设置的新日期对象?
var d = new Date();
d.setDate(11);
会导致
Tue Aug 14 2012 00:31:56 GMT-0500 (Central Daylight Time)
日期对象确实有set方法。
http://www.tutorialspoint.com/javascript/javascript_date_object.htm