2012-01-28 78 views
1

我正在使用ColdFusion 9.0.1。如何找到最近一个星期一?

我在每个星期一午夜创建比赛。我需要使用ColdFusion(但我确定其他语言的逻辑相同)才能找到最近一个星期一的日期。一旦我确定了这个日期,我会把这个日期放到一个SQL语句中以获得当前的排名和过去的结果。

那么,我需要什么功能来找到最近一个星期一?

ANSWER

Dates = structNew(); 
Dates.CurrentDay = dateFormat(now(), "yyyy-mm-dd"); 
// LOOP MAX OF SEVEN TIMES 
for (i = 1; i lte 7; i++) { 
    // IF CURRENT DAY OF WEEK IS MONDAY SET AND BREAK 
    if (dayOfWeek(Dates.CurrentDay) == 2) { 
     Dates.BikeOfTheWeekDate = Dates.CurrentDay; 
     break; 
    // IF CURRENT DAY OF WEEK IS NOT MONDAY SUBTRACT DAY 
    } else { 
     Dates.CurrentDay = dateAdd("d", -1, Dates.CurrentDay); 
    } 
} 

回答

6

伪代码:

Get the current day 
Loop 
    Check if it's Monday 
     If yes, break out of the loop 
    Substract one 
Next loop 

在ColdFusion的,。减去有一天DateAdd("d", -1, date)和检查周一DayOfWeek(date)这为周一返回2。

+1

你的逻辑我受益匪浅。谢谢! – 2012-01-28 21:40:08

9

你也可以只扣除一周的当天,从2(即周一)

<!--- All days except Sunday (ie 2-Monday,...,7-Saturday) ---> 
<cfif dayOfWeek(currentDate) gt 1> 
    <cfset mostRecentMonday = dateAdd("d", 2-dayOfWeek(currentDate), currentDate)> 
<cfelse> 
    <cfset mostRecentMonday = dateAdd("d", -6, currentDate)> 
</cfif> 
+0

多数民众赞成我如何做到这一点,如果你在ColdFusion 9上,你可以把它包装成一个单一的十行。 – 2012-01-30 00:59:37

+3

'' – 2012-01-30 01:00:52

+0

比循环更优雅。 – ale 2012-01-30 19:28:00

0

你也可以做到这一点使用java Calendar类。

这是ColdFusion日期方法在内部使用的内容。

<cfscript> 
var cal = createObject('java', 'java.util.Calendar').getInstance(); 
cal.setTime(now()); 

// if the (7) day of week is before (2) monday, we want the previous week 
// decrement the (3) week of year 
if (cal.get(7) < 2) { 
    cal.set(3, cal.get(3) - 1); 
} 

// set the (7) day of week back to (2) monday 
cal.set(7, 2); // 7 = day of week, 2 = monday 

// reset time fields back to 0, aka midnight 
cal.set(11, 0); // 11 = hour of day 
cal.set(12, 0); // 12 = minute 
cal.set(13, 0); // 13 = second 
cal.set(14, 0); // 14 = millisecond 

// get the last monday Date 
var lastMonday = cal.getTime(); 

// cal.getTime() returns a java.util.Date 
// if you want to convert the date to a ColdFusion OleDateTime, you can like so 
var lastMonday = dateAdd('d', 0, cal.getTime()); 

// or like this 
var lastMonday = createObject('java', 'coldfusion.runtime.OleDateTime').init(cal.getTime()); 
<cfscript> 

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Date.html