与previous one I asked类似的问题,但不同之处在于这不是来自基础字段的直接呈现 - 而是部分SSJS的一部分。
这是一个视图列,它显示SSJS函数的结果,该函数返回渲染的HTML。此HTML包含DateTime字段中的日期,该日期使用@Text转换为文本。我遇到的问题是,@ Text使用服务器的语言环境设置转换日期,而不是浏览器。
是否有替代@Text(dateValue," D0S0")的浏览器区域设置?
答案 0 :(得分:0)
最多" XPagey"这样做的方法是使用日期/时间转换器。例如(使用替换计算值):
<xp:viewColumn columnName="">
<xp:this.value><![CDATA[#{javascript:
new java.util.Date()
}]]></xp:this.value>
<xp:this.converter>
<xp:convertDateTime type="both"/>
</xp:this.converter>
</xp:viewColumn>
&#34; convertDateTime&#34;及其内置格式将尊重浏览器提供的区域设置。如果您在Xsp属性中设置选项以使用浏览器的时区和&#34;往返&#34;,它还应该尊重用户的时区。
答案 1 :(得分:0)
我已成功使用DateFormat.getDateInstance
来解决这个问题。唯一的问题是它没有以与XPage日期转换器相同的格式返回短日期(没有前导零和2位数年份)。我已经绕过了这个,但是后面有一些摆弄着弦。
这是完整的功能:
function returnLocalShortDate(ndtDate) {
// Receives NotesDateTime object, Java date or string; returns localised date string in XPages short date format
importPackage(java.text);
if (@IsText(ndtDate)) { // string
var jsDate = @TextToTime(ndtDate);
} else if (ndtDate instanceof Date) { // Java date
var jsDate:Date = ndtDate;
} else if (@IsTime(ndtDate)) { // Notes date/time
var jsDate:Date = ndtDate[0].toJavaDate();
} else {
return("");
}
var strDate:String = java.text.DateFormat.getDateInstance(DateFormat.SHORT, context.getLocale()).format(jsDate);
var strYear = jsDate.getFullYear();
var strDateArray = strDate.split("/");
strDate = ('0' + strDateArray[0]).slice(-2) + '/' + ('0' + strDateArray[1]).slice(-2) + '/' + strYear;
return(strDate);
}
答案 2 :(得分:0)
实际上,如果你知道你想要的格式,而不是用户可能想要的浏览器设置,你应该使用SimpleDateFormatter类。您可以根据the javadocs for that class所需的任何模式提供格式。如果提供NotesDocument对象和字段名称,则以dd-MMM-yyyy格式返回日期。
function getFormattedDate ( doc:NotesDocument, fieldName:String ) {
importPackage(java.text);
var dateFormatter:java.text.SimpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy");
var d:Date = new Date(@Today());
if ( doc.hasItem (fieldName) ) {
var valueVector:java.util.Vector = doc.getItemValueDateTimeArray(fieldName);
var iterator = valueVector.iterator();
while (iterator.hasNext()) {
var itemvalue = iterator.next();
if ((typeof(itemvalue)).endsWith("DateTime")) {
d = new Date(itemvalue.toJavaDate());
return dateFormatter.format(d);
}
}
} else {
return fieldName + " is not on the document"
}
}
我非常感谢Declan Lynch的blog entry on date formatting,它需要一些调试,因为SSJS现在将日期值作为Vector返回。