【发布时间】:2014-07-05 13:30:05
【问题描述】:
我目前正在使用 jquery FullCalendar 插件来创建一个特定的日历。
我必须完成的一项任务是如何获得当月的任何特定日期。
我目前在服务器端使用 Coldfusion 10,所以我想知道是否有任何特定的方法可以将星期二的每个实例转换为日期数组?
理想情况下,我想在服务器端执行此操作并填充日历插件。
我的问题主要是尝试获取日历月的每一天。
非常感谢任何建议。
【问题讨论】:
标签: date coldfusion
我目前正在使用 jquery FullCalendar 插件来创建一个特定的日历。
我必须完成的一项任务是如何获得当月的任何特定日期。
我目前在服务器端使用 Coldfusion 10,所以我想知道是否有任何特定的方法可以将星期二的每个实例转换为日期数组?
理想情况下,我想在服务器端执行此操作并填充日历插件。
我的问题主要是尝试获取日历月的每一天。
非常感谢任何建议。
【问题讨论】:
标签: date coldfusion
CFLlib 上的firstXDayOfMonth() UDF 允许您找到给定月份中给定星期几的第一天。从那里您只需要从该日期循环添加7 每次迭代,直到该月不再是所选月份。
theMonth = month(now());
startDate = firstXDayOfMonth(3, theMonth, year(now()));
tuesdays = [];
for (date=startDate; month(date) == theMonth; date +=7){
arrayAppend(tuesdays, dateAdd("s",0, date)); // this just converts date from a number back to a date
}
writeDump(tuesdays);
更新: 实际上,CFLib 上的 UDF 方法很糟糕。请改用此变体:
function firstXDayOfMonth(dayOfWeek,month,year){
var firstOfMonth = createDate(year, month,1);
var dowOfFirst = dayOfWeek(firstOfMonth);
var daysToAdd = (7 - (dowOfFirst - dayOfWeek)) MOD 7;
var dow = dateAdd("d", daysToAdd, firstOfMonth);
return dow;
}
稍后我将更新 cflib 上的 UDF:我需要先为其编写一些体面的单元测试,并且目前有点忙。
【讨论】:
此时,CF 中没有一个函数可以获取所有星期二。但这里有一个简单的方法:
// assuming a year and month are defined already
var firstDayOfMonth = createDate( year, month, 1 );
var targetDayOfWeek = 3; // Tuesday is 3 if Sunday is 1
var dayOfWeekArray = []; // This is the outcome.
// loop through each day of the month adding the target days to the array.
for( i = 1; i LTE daysInMonth( firstDayOfMonth ); i++){
var loopingDate = createDate( year, month, i );
if( dayOfWeek( loopingDate ) == targetDayOfWeek ){
ArrayAppend( dayOfWeekArray, loopingDate );
}
}
dayOfWeekArray 是每月每个星期二的数组。
就您要查找的内容而言,您的标题和帖子似乎有冲突,因此我将坚持使用标题,因为这就是我来这里的原因...
您可以执行以下操作来查找一个月内的所有星期二:
这是我使用的代码(cfscript):
// assuming a year and month are defined already
var firstDayOfMonth = createDate( year, month, 1 );
var dayOfWeekArray = [];
var targetDayOfWeek = 3; // Tuesday is 3 if Sunday is 1. Do a quick writeDump in the loop if you're not sure.
for( i = 1; i LTE daysInMonth( firstDayOfMonth ); i++){
var loopingDate = createDate( year, month, i );
if( dayOfWeek( loopingDate ) == targetDayOfWeek ){
ArrayAppend( dayOfWeekArray, datePart( "d", loopingDate );
// ArrayAppend( dayOfWeekArray, loopingDate ); - use this if you'd rather have the whole date object
}
}
这将为您提供dayOfWeekArray,这将是特定月份每个星期二的日期。例如,本月(2019 年 1 月)将是 [1, 8, 15, 22, 29]。如果需要,您可以将其更改为整个日期对象 - 这就是我在顶部的简短版本中所做的。
【讨论】: