【问题标题】:MooTools Date Picker default formatMooTools 日期选择器默认格式
【发布时间】:2013-07-02 11:39:20
【问题描述】:

我正在使用 mootools 的日期选择器,并尝试根据用户的位置对其进行本地化格式。

例如:

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

【问题讨论】:

  • 日期选择器(如果是 arian 的)使用来自 mootools-more 的 Locale。尝试Locale.use() 并阅读文档mootools.net/docs/more/Locale/Locale
  • 感谢您的指点...虽然我必须承认,但我认为默认意味着它会开箱即用?不?我很高兴尝试使用Locale.use() 并将其输出为Picker 的字符串
  • 仍然没有找到解决这个问题的可靠方法
  • 我的回答有帮助吗?

标签: javascript date datepicker timezone mootools


【解决方案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

【讨论】:

  • 我对找到可以在 Locale.use() 中使用的位置客户端的方法很感兴趣,所以我询问了this question,以防有一个现代解决方案.
猜你喜欢
  • 1970-01-01
  • 2021-03-14
  • 2011-10-02
  • 1970-01-01
  • 2011-04-19
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
相关资源
最近更新 更多