Как найти самый последний прошедший понедельник? - PullRequest
1 голос
/ 29 января 2012

Я использую ColdFusion 9.0.1.

Я создаю конкурс каждый понедельник в полночь.Мне нужно использовать ColdFusion (но я уверен, что логика одинакова для других языков), чтобы найти дату самого последнего прошедшего понедельника.После определения этой даты я перенесу эту дату в оператор SQL, чтобы получить текущие результаты и прошлые результаты.

Итак, какие функции мне нужны, чтобы найти самый последний прошедший понедельник?

ОТВЕТ

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);
    }
}

Ответы [ 3 ]

10 голосов
/ 29 января 2012

Вы также можете просто вычесть текущий день недели из 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>
6 голосов
/ 29 января 2012

Псевдокод:

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 для понедельника.

0 голосов
/ 03 февраля 2012

Вы также можете сделать это с помощью класса 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...