回答
如果您可以使用EXSLT,則有several date functions可用。所有這些都是在Saxon中實現的,但是如果您使用的是MSXSL,Chris Bayes已將它們實現爲擴展函數,您可以在msxsl:script元素中實際放置您的變換。他的實現從每個特定的日期函數頁面鏈接。
是week-in-year()您正在尋找的功能?
編輯:每JeniT的評論,有在同一地點用相同的功能星期 - 年()(這是她寫的,我認爲),這可能會更好地滿足您需求的pure XSLT 1.0 template可用。
我在Visual Basic程序,所以我知道如何使用VB.NET做。看了你的XML日期爲變量(姑且稱之爲SomeDate),然後構造一個新的。你知道日期是包含未知日期年初然後,你讓則DateDiff功能做工作,告訴你週數
Dim SomeDate As Date = ReadDateFromXML()
Dim YearStart As New Date(Year(SomeDate), 1, 1)
Dim WeekNumber As Integer = DateDiff(DateInterval.WeekOfYear, YearStart, SomeDate)
它需要是純粹的XSLT解決方案。我不能使用任何代碼:( – 2008-10-07 15:17:45
而在C#:
DateTime date = DateTime.Now;
int week = date.DayOfYear/7;
Console.WriteLine(week);
它需要是純粹的XSLT解決方案我不能使用任何代碼:( – 2008-10-07 15:16:16
這是不正確的... 看看這裏看看爲什麼: http://social.msdn.microsoft .com/Forums/en-US/vbgeneral/thread/e38accde-7eaa-462e-95d0-5a47b7dab832/ – 2009-03-29 11:23:02
如果您始終希望一週的同一天開始,那麼一週計算會變得非常複雜,因爲一年中的第一天總是在變化。有一個計算它的ISO標準,見this Wikipedia article。
我意識到這一點,但並不是必需的,Everyweek可以從星期天或星期一開始,我只需要計算兩個日期之間的差異(以星期爲單位) – 2008-10-07 15:20:19
查看Sal Mangano的XSLT食譜。有趣的是它可在books.google.com http://books.google.com/books?id=su4pWUPWwuEC&pg=PA125&lpg=PA125&dq=xslt+weeknumber&source=web&ots=nBBc3DVJYU&sig=l19cpOhwd9_PqrB72b9CCZk9wUA
了XSLT 2.0的方法是:
<xsl:function name="chkbk:calculate-week-number" as="xs:integer">
<xsl:param name="date" as="xs:date" />
<xsl:sequence select="xs:integer(format-date($date,'[W'))" />
</xsl:function>
爲1.0的方式,請參閱預覽cookbox。順便說一句,我只是搜索xslt weeknumber找到這個。
這是一個純粹XSLT 1.0溶液:
人們可以使用由Martin羅林森,附帶了XSelerator(一個不錯的XSLT IDE的datetime_lib.xsl
樣式表模塊,最近提出sourceforge上自由使用)。您將不得不下載並安裝此應用程序,然後您將找到大量額外的庫和高級技術和解決方案樣本。
的datetime_lib.xsl
文件上可以找到(典型安裝):
C:\ Program Files文件\ Marrowsoft \ Xselerator25 \的Samples \庫\
從這個庫,這裏是名爲「周編號」的模板:
<xsl:template name="week-number"> <xsl:param name="year"/> <xsl:param name="month"/> <xsl:param name="day"/> <!-- or --> <xsl:param name="date" select="''"/> <!-- format: yyyymmdd or yyyy-mm-dd --> <!-- or --> <xsl:param name="julian-day" select="''"/> <!-- trim down date --> <xsl:variable name="tdate" select="translate($date,'-','')"/> <!-- decide which params were passed --> <xsl:variable name="yyyy"> <xsl:choose> <xsl:when test="string-length($date) > 0"><xsl:value-of select="substring($tdate,1,4)"/></xsl:when> <xsl:when test="string-length($julian-day) > 0"> <xsl:variable name="jdate"> <xsl:call-template name="julian-day-to-date"> <xsl:with-param name="julian-day" select="$julian-day"/> </xsl:call-template> </xsl:variable> <xsl:value-of select="substring($jdate,1,4)"/> </xsl:when> <xsl:otherwise><xsl:value-of select="$year"/></xsl:otherwise> </xsl:choose> </xsl:variable> <!-- get the julian day number --> <xsl:variable name="jd"> <xsl:choose> <xsl:when test="string-length($julian-day) > 0"><xsl:value-of select="$julian-day"/></xsl:when> <xsl:otherwise> <xsl:call-template name="date-to-julian-day"> <xsl:with-param name="year" select="$year"/> <xsl:with-param name="month" select="$month"/> <xsl:with-param name="day" select="$day"/> <xsl:with-param name="date" select="$date"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- get the julian day number for the first working day of next year --> <xsl:variable name="fyjd"> <xsl:call-template name="first-day-of-year"> <xsl:with-param name="year" select="$yyyy+1"/> <xsl:with-param name="as-julian-day" select="true()"/> </xsl:call-template> </xsl:variable> <!-- decide which the 'working' year for this date is --> <xsl:variable name="start-jd"> <xsl:choose> <xsl:when test="$jd >= $fyjd"><xsl:value-of select="$fyjd"/></xsl:when> <xsl:otherwise> <xsl:call-template name="date-to-julian-day"> <xsl:with-param name="date"> <xsl:call-template name="first-day-of-year"> <xsl:with-param name="year" select="$yyyy"/> </xsl:call-template> </xsl:with-param> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- final calc output --> <xsl:value-of select="floor(($jd - $start-jd) div 7) + 1"/> </xsl:template>
下面是使用 「週數」 模板一個簡單的XSLT轉換:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"> <xsl:import href= "C:\Program Files\Marrowsoft\Xselerator25\Samples\Libraries\datetime_lib.xsl"/> <xsl:output method="text"/> <xsl:template match="/"> <xsl:call-template name="week-number"> <xsl:with-param name="date" select="'2008-11-16'"/> </xsl:call-template> </xsl:template> </xsl:stylesheet>
當任何源XML文檔(未使用)應用,通緝結果產生:
希望這次的答案真的更有幫助。
乾杯,
Dimitre Novatchev。
- 1. Weeknumber打印日期輸出
- 2. 從日數計算日期?
- 3. 計算日期平均值
- 4. Sharepoint計算日期值
- 5. 從兩個日期計算日期
- 6. 從日期計算年份
- 7. 從數字計算日期
- 8. sql計算日期從列
- 9. 從excel中計算日期
- 10. R strptime星期一從weeknumber怪異的日期
- 11. 如何在周開始日期(星期一)從WeekNumber和Year TSQL
- 12. 計算日期
- 13. 計算日期
- 14. 計算日期
- 15. 計算日期
- 16. 日期計算
- 17. 計算日期
- 18. 從期限計算結束日期
- 19. Laravel日期計算
- 20. SQL日期計算
- 21. EXTJS日期計算
- 22. Excel日期計算
- 23. 計算二日期
- 24. MySQL日期計算
- 25. firebird:計算日期
- 26. SQL計算日期
- 27. jquery - 日期計算
- 28. C#計算日期
- 29. Javascript日期計算
- 30. Java日期計算
如果您在該網站上查看,則會發現一個純XSLT 1.0模板,可以爲您執行此操作:http://www.exslt.org/date/functions/week-in- year/date.week-in-year.template.xsl – JeniT 2008-10-08 21:26:23
所以有,我錯過了,甚至更好 – 2008-10-08 23:23:50