使用Coldfusion获取本月的每个星期二

时间:2014-07-05 13:30:05

标签: date coldfusion

我目前正在使用jquery FullCalendar插件来创建特定的日历。

我必须解决的一个任务是如何获得本月的特定日期。

我目前正在使用Coldfusion 10作为服务器端,所以我想知道是否有任何特定的方法可以将星期二的每个实例都变成一组日期?

理想情况下,我想在服务器端执行此操作并填充日历插件。

我的问题主要是尝试获取某个日历月的每个特定日期。

任何建议都非常感谢。

2 个答案:

答案 0 :(得分:6)

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:我需要先为它编写一些不错的单元测试,并且现在有点忙。

答案 1 :(得分:0)

简称:

目前,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]。您可以根据需要将其更改为整个日期对象,这就是我在顶部的简短版本中所做的。