使用ColdFusion根据季节更改内容

时间:2010-04-19 16:31:50

标签: datetime coldfusion date

对于ColdFusion,我想使用cfswitch语句为一年中的每个季节提供不同的代码。例如,为冬天显示<p>Winter</p>,为夏天显示<p>Summer</p>等。达到此目的的最佳方法是什么?

4 个答案:

答案 0 :(得分:0)

只需定义您的季节开始时间,并在应用程序启动时检查它。

我认为把它放在onSessionStart上是有道理的。

答案 1 :(得分:0)

从技术上讲,季节正式开始和结束的日期vary from year to year。如果您需要准确,您可以使用包含每个季节的日期范围的外部属性文件(以便于年度维护)。如果您不需要那么精确,您可以使用近似日期对日期范围进行硬编码,例如:夏季将于6月21日开始。加载页面或会话开始时,使用Now()获取当前日期,并将其与日期范围进行比较,以找出它对应的季节。

答案 2 :(得分:0)

使用getSeason()方法创建一个season.cfc组件,该方法始终返回当前季节。您可以为各种季节的开始和结束编写getter和setter。或者创建一个从xml或配置文件字符串中检索季节日期的函数。

<cfscript>
    function getSeason(){
        var currentdatetime = DateFormat(now(), "MMDD");
        var season = "";
        // Spring
        var springbegin = "0321";
        var springend = "0620";
        // Sommer
        var summerbegin = "0621";
        var summerend = "0922";
        // Fall
        var fallbegin = "0923";
        var fallend = "1220";
        // Winter begin of year
        var winter1begin = "0101";
        var winter1end = "0320";
        // Winter end of year
        var winter2begin = "1221";
        var winter2end = "1231";
        if ((currentdatetime gte springbegin) and (currentdatetime lte springend)){
            season = "spring";
        } else if ((currentdatetime gte summerbegin) and (currentdatetime lte summerend)){
            season = "summer";
        } else if ((currentdatetime gte fallbegin) and (currentdatetime lte fallend)){
            season = "fall";
        } if ((currentdatetime gte winter1begin) and (currentdatetime lte winter1end)){
            season = "winter";
        } if ((currentdatetime gte winter2begin) and (currentdatetime lte winter2end)){
            season = "winter";
        } 
        return season;
    }
</cfscript>

<cfset currentseason = getSeason()>

定义文字。

<cfset seasonText = structNew()>    
<cfset seasonText["winter"] = "Winter">
<cfset seasonText["spring"] = "Spring">
<cfset seasonText["summer"] = "Summer">
<cfset seasonText["fall"] = "Fall">

这是您在视图中的内容

<p>#seasonText[currentseason]#</p>

您还可以使用此技术显示不同的图像,具体取决于季节。

答案 3 :(得分:0)

使用提供的代码,我能够创建我想要的cfswitch语句。这是一个例子:

<cfswitch expression="#getSeason()#">
  <cfcase delimiters="," value="Winter">
    <p>Winter Edition</p>
    <p><img src="/images/winterPhoto.jpg" alt="Winter Image" /></p>
  </cfcase>
  <cfcase delimiters="," value="Spring">
    <p>Spring Edition</p>
    <p><img src="/images/springPhoto.jpg" alt="Spring Image" /></p>
  </cfcase>
  <cfcase delimiters="," value="Summer">
    <p>Summer Edition</p>
    <p><img src="/images/summerPhoto.jpg" alt="Summer Image" /></p>
  </cfcase>
  <cfcase delimiters="," value="Fall">
    <p>Fall Edition</p>
    <p><img src="/images/fallPhoto.jpg" alt="Fall Image" /></p>
  </cfcase>
  <cfdefaultcase>
    <p><img src="/images/neutralPhoto.jpg" alt="Neutral Image" /></p>
  </cfdefaultcase>
</cfswitch>

这使我能够获得一年中每个季节所需的任何代码。我没有找到确切的日期。几天之后,这需要额外的工作和维护。非常感谢大家的帮助。