我有一个模型在我的数据库中,包含一个数组名为"AvailableDays"[0…6]。0 =星期天&星期六。我希望将一周的这一天的数字转换为当前周的日期。
例如,这是逻辑分解
- 检索可用天数列表(
const availableDays = [0,2,4,6]
) - 获取当前日期(
const today = new Date('2021-08-20');
) - 将日期转换为日期(
output =['15-08-2021', '17-08-2021', '19-08-2021', '21-08-2021']
)
您可以做的是从给定的Date
实例中获得星期几,并从可用的日期计算出偏移量。
然后从给定的日期减去以天为单位的偏移量,得到结果。
const transformDate = (date, day) => {
const offset = date.getDay() - day
const d = new Date(date)
d.setDate(d.getDate() - offset)
return d
}
const availableDays = [0,2,4,6]
const today = new Date("2021-08-20")
console.log(availableDays.map(day => transformDate(today, day)))
我自己解决了这个问题。现在我可以将其封装到availableDates.map()中,并使用下面的逻辑返回日期数组。
var availableDay = 0
var d = new Date(),
day = d.getDay(), // 0 ... 6
calcAvailableDay = day-availableDay,
diff = d.getDate() - calcAvailableDay,
output = new Date(d.setDate(diff));
console.log(output)
您可以以周为单位生成所有的天,然后使用availableDays
获取日期。
const getWeekDays = (current) => {
current.setDate((current.getDate() - current.getDay() - 1));
return Array.from({ length: 7 }, (_, i) => {
current.setDate(current.getDate() + 1)
return new Date(current).toLocaleDateString('en-CA');
});
},
today = new Date('2021-08-20'),
weekDays = getWeekDays(today),
availableDays = [0, 2, 4, 6],
availableDates = availableDays.map(day => weekDays[day]);
console.log(availableDates);
JavaScript getDay方法根据当地时间返回指定日期的星期几,其中0表示星期日。
那么你要做的就是把这个索引和你的availableDays
值连接起来。
- 获取当前日期、月份、年份和今天日期的索引。
- 循环
availableDays
数组,并使用getDay
值计算的当前日期与数组中指定的日值之间的差值创建新的日期。 - 使用一些逻辑以指定的格式表示这些日期对象。我从这篇文章中得到支持来格式化你的日期字符串。
const availableDays = [0,2,4,6];
const today = new Date();
const currentDay = today.getDay();
const currentDate = today.getDate();
const currentMonth = today.getMonth();
const currentYear = today.getFullYear();
formatDateToString = (date) => String(date.getDate()).padStart(2, '0') + '-' + String(date.getMonth() + 1).padStart(2, '0') + '-' + date.getFullYear();
const output = availableDays.map((day) => formatDateToString(new Date(currentYear, currentMonth, currentDate - (currentDay - day))));
console.log(output);