如何在xslt 1.0中仅获取两个日期之间的工作日 [英] How to get only business days between two dates in xslt 1.0

查看:24
本文介绍了如何在xslt 1.0中仅获取两个日期之间的工作日的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要帮助来计算 xslt 1.0 中两个日期之间的工作日(即不包括星期六和星期日)

I need help to count only business days (i.e excluding Saturday and Sunday ) between two dates in xslt 1.0

推荐答案

只计算工作日(即不包括周六和周日)xslt 1.0 中的两个日期

count only business days (i.e excluding Saturday and Sunday ) between two dates in xslt 1.0

如果可以假设给定的两个日期落在星期六或星期日,则可以使用以下示例中显示的方法:

If it can be assumed that the two given dates will not fall on Saturday or Sunday, you could use the method shown in the following example:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <output>
        <workdays>
            <xsl:call-template name="duration-in-workdays">
                <xsl:with-param name="start-date" select="'2015-04-02'" />
                <xsl:with-param name="end-date" select="'2015-04-08'" />
            </xsl:call-template>
        </workdays>
    </output>
</xsl:template> 

<xsl:template name="duration-in-workdays">
    <!-- assumes start-date and end-date are both workdays -->
    <xsl:param name="start-date"/>
    <xsl:param name="end-date"/>
    <xsl:variable name="start">
        <xsl:call-template name="JDN">
            <xsl:with-param name="date" select="$start-date" />
        </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="end">
        <xsl:call-template name="JDN">
            <xsl:with-param name="date" select="$end-date" />
        </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="start-weekday" select="($start + 1) mod 7" />
    <xsl:variable name="end-weekday" select="($end + 1) mod 7" />
    <xsl:variable name="weeks" select="floor(($end - $start) div 7)" />
    <xsl:variable name="days" select="($end - $start) mod 7" />

    <xsl:value-of select="5 * $weeks + $days - 2*($start-weekday > $end-weekday)"/>
</xsl:template> 

<xsl:template name="JDN">
    <xsl:param name="date"/>
    <xsl:variable name="year" select="substring($date, 1, 4)"/>
    <xsl:variable name="month" select="substring($date, 6, 2)"/>
    <xsl:variable name="day" select="substring($date, 9, 2)"/>
    <xsl:variable name="a" select="floor((14 - $month) div 12)"/>
    <xsl:variable name="y" select="$year + 4800 - $a"/>
    <xsl:variable name="m" select="$month + 12*$a - 3"/>
    <xsl:value-of select="$day + floor((153*$m + 2) div 5) + 365*$y + floor($y div 4) - floor($y div 100) + floor($y div 400) - 32045" />
</xsl:template> 

</xsl:stylesheet>

</xsl:stylesheet>

警告:未经过彻底测试.

这篇关于如何在xslt 1.0中仅获取两个日期之间的工作日的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆