繁体   English   中英

在javascript中设置星期几

[英]setting day of week in javascript

我正在使用 phonegap localNotifications 插件,它指定我可以设置每周发生一次通知。

但是,javascript 日期对象似乎只有.getDay()而不是.setDay()

我有一个我想设置为重复的一周中的几天的 json 对象,

set_days = {"mon":false, "tues":true,"wed":false,"thurs":true...}

你如何在javascript中设置一天? 因为是设置通知,那一天必须在未来,所以我不想得到最近的“星期三”,而只想得到下一个“星期三”。

这是插件的链接,但我认为这不是插件特有的。

你如何在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;

这是一个已经完成的答案,但我找到了一个我想与您分享的解决方案。

我不擅长更新像 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]}));

附加说明

如果你真的不想松散ref和更新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

您是否正在创建要设置的新日期对象?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM