如何添加新年?

esp*_*fee 0 coldfusion dateadd

我希望在上一学年结束后每次增加学年.例如,我当前的代码如下所示:

WHERE schooldt BETWEEN '07/01/2016' AND '06/30/2017'
Run Code Online (Sandbox Code Playgroud)

因此,一旦学年结束,06/30/2017我想自动设置新的开始日期和新的结束日期.我在考虑在冷​​聚变中使用dateAdd().有没有其他方法可以做到这一点,最有效的是什么?

提前致谢.

Lei*_*igh 6

我希望在上一学年结束后每次增加学年

然后实现逻辑,根据当前月份更改查询中使用的日期值.如果当前月份早于7月,那么您知道当前学年仍在进行中.因此,扣除一年来计算开始日期.否则,转到下一年.

    <cfset today = now()>
    <!--- If the current school year is still in progress --->
    <cfif month(today) lt 7>
        <cfset startDate = createDate( year(today) - 1, 7, 1)>
        <cfset endDate = createDate( year(today), 6, 30)>
    <!--- Otherwise, move to next year --->
    <cfelse>
        <cfset startDate = createDate( year(today), 7, 1)>
        <cfset endDate = createDate( year(today) + 1, 6, 30)>
    </cfif>
Run Code Online (Sandbox Code Playgroud)

至于查询,要记住两件事:

  • 日期字符串不明确.始终使用日期对象.
  • 小心日期比较和BETWEEN操作员.如果SchoolDt列包含日期和时间,则结果可能与您的预期不符.一个更灵活的构造(即使列包含日期和时间,仍然有效)是:

    WHERE SchoolDt >= <cfqueryparam value="#startDate#" cfsqltype="cf_sql_date">
    AND   SchoolDt < <cfqueryparam value="#dateAdd('d', 1, endDate)#" cfsqltype="cf_sql_date">
    
    Run Code Online (Sandbox Code Playgroud)

    如果您使用新的Query(),请参数化sql字符串并使用addParam:

    yourQuery.addParam( name="startDate"
                       , value="#startDate#"
                       , cfsqltype="cf_sql_date" );
    
    yourQuery.addParam( name="endDate"
                       , value="#endDate#"
                       , cfsqltype="cf_sql_date" );
    
    Run Code Online (Sandbox Code Playgroud)

  • @espresso_coffee - 不,不要使用dateFormat(),因为它将date*objects*转换为字符串(不明确).DateFormat仅用于演示,即当您需要向用户显示人性化值时.使用数据库(或使用日期函数)时,请将值保留为日期对象. (2认同)