如何在XSLT中对当前日期时间减一月并格式化为mmm-YY?
解决XSLT中获取上月(mmm-yy格式)的问题
你之前的写法错误在于对格式化后的字符串做时长减法——字符串无法和xsd:dayTimeDuration类型进行运算,必须先对日期时间对象做减法,再格式化。
正确的实现逻辑是:先计算出上月的日期时间,再对这个结果进行格式化。完整代码如下:
xp20:format-dateTime(fn:current-dateTime() - xsd:dayTimeDuration('P1M'), "[Mn,*-3]-[Y01]")
关键解释:
fn:current-dateTime()返回原生的xs:dateTime类型值,能直接和xsd:dayTimeDuration('P1M')(代表1个月时长)做减法,得到上月的对应时间点- 把运算后的日期时间对象传入
xp20:format-dateTime,用[Mn,*-3]生成3字母月份缩写,[Y01]生成年份后两位,最终得到mmm-yy格式的结果
边界情况说明:
如果当前是1月(比如2025-01-20),减去1个月会自动处理为上一年的12月(2024-12-20),格式化后输出Dec-24,无需额外处理跨年度的逻辑。
内容的提问来源于stack exchange,提问作者joelouis
相关产品推荐
相关产品推荐

