MooTools日期选择器默认格式

时间:2013-07-02 11:39:21

标签: javascript date datepicker timezone mootools

我正在使用来自mootools的datepicker,并尝试根据用户位置设置本地化格式。

例如:

08/15/13 //American
15.08.13 //English

文档说明它应该默认更改format: (*string*, defaults to the default localized format)

但是使用这段代码:

    window.addEvent('domready', function(){
    new Picker.Date($$('input'), {
        timePicker: true,
        positionOffset: {x: 5, y: 0},
        pickerClass: 'datepicker_bootstrap',
        useFadeInOut: !Browser.ie
    });
});

它始终使用美国格式08/15/13(第一个月)。

我正在通过更改我在Windows 7 Date and Time

中设置的时区进行测试

1 个答案:

答案 0 :(得分:1)

我不认为DatePicker会“开箱即用”。我不确定在客户端脚本中是否有防水方式来获取用户位置或语言代码。

我刚试过:

var language = window.navigator.userLanguage || window.navigator.language;
console.log(language);

并在Chrome中获得"sv",在同一台计算机中获得Firefox中的"en-GB"

我使用php / HTTP-request标头大致相同。考虑从服务器端获取信息。 This个问题点HTTP_ACCEPT_LANGUAGE是最佳方式,但是:

$_SERVER["HTTP_ACCEPT_LANGUAGE"] // gives me:
sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4 //in chrome
en-gb,en;q=0.5 //in firefox

如果您查看DatePicker.js文件,您可以在第一行:

---
name: Locale.en-US.DatePicker
description: English Language File for DatePicker
authors: Arian Stolwijk
requires: [More/Locale]
provides: Locale.en-US.DatePicker
...

这让我觉得它被设定为en-US。如果您手动设置它将会起作用。

我的建议是遵循Dimitar的建议,并使用Locale.use()手动设置它。如果您在调用DatePicker之前添加例如Locale.use('sv-SE');,您将获得格式为yyyy-mm-dd的日期。

我做了一个脚本来阅读客户端语言,试图让它变得动态。它可以工作,但它没有经过测试。这会分配一种语言,比较Mootools Locale.list()和我在上面发布的浏览器/ javascript答案:

var language = window.navigator.userLanguage || window.navigator.language;
console.log(language); //gives the results I wrote above (sv/en-GB resp. Chrome/FF)
var list = Locale.list().length;
for (var i = 0; i < list; i++) {
    if (Locale.list()[i] == language) { //check if it's a full match
        Locale.use(language);
    } else { 
// go for the first part of the "sv-SE" and find a match
// this is a compromise, it gets the right language but might miss the right country
        var langArray = language.split('-');
        var locArray = Locale.list()[i].split('-');
        for (var k = 0; k < list; k++) {
            if (langArray[0] == locArray[0]) {
                Locale.use(Locale.list()[i]);
            }
        }
    }
}
console.log(Locale.getCurrent().name); // gives sv-SE/en-GB resp. Chrome/FF
new Picker.Date($$('input'), { 
// etc...

如果您认为它有用,您可以对其进行微调...... 的 Fiddle here