XSL中实现输入一个日期返回此日期的星期
来源:互联网 发布:内存优化 编辑:程序博客网 时间:2024/05/29 19:56
输入一个日期返回此日期的星期,这个功能需用xsl中实现。
现有一个XSL模板实现了此功能,代码如下:
- <msxsl:script language="JScript" implements-prefix="user">
- function getdate(dateNode) {
- var thisDate=dateNode.nextNode().text;
- var index1=thisDate.indexOf("-");
- var index2=thisDate.indexOf("-",index1+1);
- var tempYear=thisDate.substring(0,index1);
- var tempMon=thisDate.substring(index1+1,index2);
- var tempDay=thisDate.substring(index2+1);
- var dateObj=new Date(tempYear,tempMon-1,tempDay);
- var tempweekday=dateObj.getDay();
- var xxx="";
- switch(tempweekday){
- case 0: xxx="sunday";break;
- case 1: xxx="monday";break;
- case 2: xxx="tuesday";break;
- case 3: xxx="wednesday";break;
- case 4: xxx="thursday";break;
- case 5: xxx="friday";break;
- case 6: xxx="saturday";break;
- }
- return xxx;
- }
- </msxsl:script>
调用:
- <xsl:value-of select="user:getdate('2009-10-10')"/>
但是此方法是用微软的JSCRIPT实现的,在IE下可以正常使用,而在FIREFOX下就不行了。因为JSCRIPT是MS自家的,就像HTC一样,都不被FIREFOX支持。
如果可以不在XSL模板中就可用JAVASCRIPT来实现:
- function getWeek_Zh(dateStr){
- var index1=dateStr.indexOf("-");
- var index2=dateStr.indexOf("-",index1+1);
- var tempYear=dateStr.substring(0,index1);
- var tempMon=dateStr.substring(index1+1,index2);
- var tempDay=dateStr.substring(index2+1);
- var dateObj=new Date(tempYear,tempMon-1,tempDay);
- alert("----------"+dateObj);
- var tempweekday=dateObj.getDay();
- var xxx="";
- switch(tempweekday){
- case 0: xxx="sunday";break;
- case 1: xxx="monday";break;
- case 2: xxx="tuesday";break;
- case 3: xxx="wednesday";break;
- case 4: xxx="thursday";break;
- case 5: xxx="friday";break;
- case 6: xxx="saturday";break;
- }
- return xxx;
- }
由于XSL的日期函数比较
缺乏,想在xsl模板中用类似new Date(),然后用getDay()的方法来实现是不可能的。一直未找到好的解决方案,昨天在CSDN论坛发帖求教,终于有大大回复,并给出了完美的解决方法:- <xsl:template name="getWeekDay">
- <xsl:param name="date" ></xsl:param>
- <xsl:variable name="y" select="substring-before($date,'-')" />
- <xsl:variable name="m" select="substring-before(substring-after($date,'-'),'-')" />
- <xsl:variable name="d" select="substring-after(substring-after($date,'-'),'-')" />
- <xsl:variable name="weekday" select="'一二三四五六日'" />
- <xsl:choose>
- <xsl:when test="$m = 1 or $m = 2 ">
- <xsl:call-template name="getWeekDay">
- <xsl:with-param name="date" select="concat($y - 1,'-',$m+12,'-',$d)"></xsl:with-param>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="weekNum" select="($d+(2*$m)+floor(3*($m+1) div 5) + $y + floor($y div 4) - floor($y div 100) + floor($y div 400)) mod 7"/>
- 星期<xsl:value-of select="substring($weekday,$weekNum+1,1)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
调用:
- <xsl:call-template name="getWeekDay">
- <xsl:with-param name="date" select="$depDateOfSubSeg"/>
- </xsl:call-template>
在此万分感谢yiy19861 !
以上XSLT的解决方案用到了一个算法:基姆拉尔森计算公式
算法如下:
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
- XSL中实现输入一个日期返回此日期的星期
- js输入一个日期,返回星期的数字.html
- java实现输入一个时间段,以及相应的星期数,获得这个时间段中这些星期的日期
- 获取输入日期的星期
- 输入一个日期判断它是星期几
- 判断一个日期的星期
- 输入日期输出星期
- 输入一个日期,判断这个日期在一年中是哪一天,是星期几,计算两个日期间的天数,使用字符串输出日期
- 用swift,输入一个日期字符串返回该日期为星期几,如:输入"2016-04-26",返回星期二
- 输入日期求星期的程序
- 根据输入的日期判断星期
- 显示输入的日期是星期几
- iOS开发实用方法—输入日期返回星期
- 在1970-9999年之间输入一个日期实现输出星期几
- C++ 实现判断一个输入日期是星期几,是一年中的第几天
- 获取一个星期时间段的具体日期
- java语言传入一个日期返回星期几
- 输入日期计算出星期几
- 常用js验证(2)
- 在liferay中生成one to many 关系说明
- 蚂蚁是如何更新信息素的?如何根据概率进行选择的?(编程实现)
- 关于自动开关机的一些经验
- Servelt入门
- XSL中实现输入一个日期返回此日期的星期
- jena 学习思路(转)
- 关于NTFS压缩被禁用
- 《建筑桩基技术规范》JGJ94-2008
- ServerVariables
- 精英阶层的出走——巩俐入新加坡籍有感
- CSS滤镜说明和用法
- C# 中的常用正则表达式总结
- 关于链表的几个常见的算法