Board logo

标题: Dojo 日期控件的国际化和集成(3) [打印本页]

作者: look_w    时间: 2018-8-10 21:36     标题: Dojo 日期控件的国际化和集成(3)

基于指定的 locale,在 String 和 Date 之间进行转换。
主要介绍两个方法:dojo.date.locale.parse() 和 dojo.date.locale.format() 。
dojo.date.locale.parse()
用于把字符串按照指定参数转换为日期类型
其中字符串的格式必须和当前页面的 locale 相匹配,否则转换将失败 , 例 :
清单 6. 字符串转换为日期类型代码 1
1
2
3
4
5
6
<script djConfig="parseOnLoad:true,isDebug:true,locale:'zh-cn'" src="<%=Context%>
    /javascript/dojo/dojo.js" >
    </script>
<script>
    dojo.date.locale.parse("12:30",{selector: "time"});
</script>




执行的结果为空,说明转换失败。 因为 locale: zh-cn 对应的时间格式为“下午 12:30 ”如换成如下代码 :
清单 7. 字符串转换为日期类型代码 2
1
2
3
4
5
6
<script djConfig="parseOnLoad: true, isDebug: true, locale:'zh-cn'" src="<%=Context%>
    /javascript/dojo/dojo.js" >
    </script>
<script>
    dojo.date.locale.parse(" 下午 12:30",{selector: "time"});
</script>




则能转换成功。由此可以看到,如果要将字符串转为日期类型,字符串的格式必须和当前页面的 locale 相匹配,这就对转换增加了一些约束。
dojo.date.locale.format()
用于把日期类型按照指定的格式转换为字符串。
在将日期类型转换为字符串时,并不要求必须与 locale 相匹配,因此使用起来更灵活些,例
清单 8. 日期转换为字符串代码 1
1
dojo.date.locale.format(new Date(), {selector:'time', timePattern:'HH:mm:ss'});




转换后结果为 : 10:18:41
清单 9. 日期转换为字符串代码 2
1
dojo.date.locale.format(new Date(), {selector:'date', datePattern:'yyyy-MM-dd'});




转换后结果为 : 2008-10-10
清单 10. 日期转换为字符串代码 3
1
2
dojo.date.locale.format(
    d,{selector:'datetime', datePattern:'yyyyMMdd',timePattern:'HHmmss'});




转换后结果为 : 20081010 101841
上述方法在 Dojo 日期控件中的应用
上面介绍了 dojo 提供的用于时间处理的一些工具,下面将介绍 dojo 日期控件是如何使用这些工具的。在给 dojo 日期控件负值的时候,会用 format 属性定义的方法将其转化为字符串存到 textbox, 做为显示值用 serialize 属性定义方法将 Date 类型数据转换为字符串 存到 valueNode,做为 dojo 日期控件的实际值在从 dojo 日期控件取值的时候,用 parse 属性定义的方法,将 textbox 中的值转换为 Date 类型。
format 方法 :dojo.date.locale.format
会根据指定的格式对 dateObject 进行转换。
我们可以通过在页面中如下配置来指定 locale: <script djConfig="parseOnLoad: true, isDebug: true, locale:'zh-cn'"> 对于日期格式可在输入参数 options 的 selector 属性中定义。目前 dojo 支持三种格式 :date,time,timestamp 。但 dojo 只对前两种定义了控件类 dijit.form.DateTextBox 和 dijit.form.TimeTextBox,如果我们需要 timestamp 类型的控件可通过扩展 dijit.form.TimeTextBox 来实现,代码如下:
清单 11. 扩展 dojo 日期控件
1
2
3
4
5
6
dojo.declare("dijit.form.TimestampTextBox",dijit.form.TimeTextBox,{
    postMixInProperties: function(){
        this.inherited('postMixInProperties', arguments);
        this.constraints.selector = 'timestamp';
    }
});




当然也可以自定义 format 方法来对 Date 类型进行转换 .
serialize 方法 : dojo.date.stamp.toISOString
按照 ISO-8601 标准来对 Date 类型进行转换,转换后的值被存在 valueNode 里,而此值是 dojo 日期控件的真实值,所以如果其格式不能满足我们的要求时,可通过自定义 serialize 方法来解决 , 例:中国时间上午 10:17 在页面中显示为:上午 10:17,如果用默认的 serialize 方法则其真实值为 :T10:17:00, 我们看到时间前多了个 T, 如果我们想最终结果为 10:17:00, 则可如下定义 serialize 方法 .
清单 12. 自定义 serialize 方法
1
2
3
4
5
function(d, options) {
    return dojo.date.locale.format(
        d, {selector:'time',timePattern:'HH:mm:ss'}
    );
}




在上面已经详细介绍了这几个方法,如果在实际应用中,上述方法不能满足要求时,我们可以通过更改相关属性对应的方法来达到目的。同时,我们注意到,上述方法中都有一个 options 参数,该参数是用来指定转换的格式的,它是一个 Object 类型的数据,对应以下属性:selector: 用来指定要转换的类型,dojo 已定义的值有 date( 只转换日期部分 ) 和 time ( 只转换时间部分 ), 如果为其他值则将会把 date 和 time 都包括进来
formatLength: 转换后字符串的长度 可选值有 long, short, medium , full 默认是 short
datePattern: 日期部分的格式
timePattern:时间部分的格式
locale:设定国际化参数




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0