标签: ecmascript-intl

Date.toLocaleString()的Chrome timeZone选项

我最近发现JavaScript有一个新的扩展.这增加了一些功能,可以在Date对象中toLocaleString,toLocaleDateStringtoLocaleTimeString功能. 参考这里.

我对timeZone支持IANA/Olson时区的选项特别感兴趣,例如America/New_YorkEurope/London. 目前仅在Google Chrome中支持此功能.

以前的建议是,要使用除UTC或您自己的本地时区之外的任何其他时区的JavaScript,必须使用库.但现在,它似乎开始直接纳入浏览器.所以现在你可以这样做:

new Date().toLocaleString("en-US", {timeZone: "America/New_York"})

// output: "7/4/2013 5:15:45 PM"
Run Code Online (Sandbox Code Playgroud)

要么:

new Date().toLocaleString("en-NZ", {timeZone: "Pacific/Chatham",
                                    timeZoneName: "long"})

// output:  "7/5/2013 9:59:52 AM GMT+12:45"
Run Code Online (Sandbox Code Playgroud)

要么:

new Date().toLocaleString("en-GB", {timeZone: "Europe/London",
                                    timeZoneName: "short"})

// output:  "4/7/2013 22:18:57 United Kingdom Time"
// (strange time zone name, but ok)
Run Code Online (Sandbox Code Playgroud)

这是非常酷,但我有几个问题:

  • 这是新标准的一部分吗?也许埋在ECMAScript 6的某个地方?或者它只是Chrome的自定义内容?
  • 为何只使用Google Chrome?它在其他地方是否受支持?是否有计划在其他任何地方支持它?
  • 我检查了使用Chrome的JavaScript运行时的node.js,但它在那里不起作用.为什么不?
  • 时区数据是否可以通过我列出的功能以外的任何其他方式访问?如果仅在格式化字符串时可用,则根据结果进行任何计算可能很困难.
  • 这主要关注输出,但我如何将其用于输入?有没有办法将构造函数中的时区传递给Date …

javascript timezone google-chrome internationalization ecmascript-intl

24
推荐指数
2
解决办法
2万
查看次数

18
推荐指数
2
解决办法
5489
查看次数

PhantomJS不支持Javascript Internationalization API

Jasmine针对AngularJs使用ECMAScript Internationalization API 的服务运行了一系列测试.当我通过Chrome运行它们时,它们都成功运行.但是,当我使用PhantomJSmaven运行它们时,它们都会失败,因为它似乎PhantomJs还不支持Internationalization API.

我使用Intl对象获得的测试错误消息是:

1:ReferenceError:找不到变量:localService.js中的Intl

其余的测试都失败了.

测试很简单,看起来像这样:

it('Format date with en-us locale', (function (){
    var date= "06/13/2013"
    expect(service.date(date,'en-us')).toEqual("6/13/2013");
}))
Run Code Online (Sandbox Code Playgroud)

服务中的方法(localizationService.js)是Intl API的简单包装器:

function getCurrentTimeZone(){
    return Intl.DateTimeFormat().resolved.timeZone
}

function date(dateInput,locale,options){
        // some other stuff
        // ... 
        if (locale) {
            return _date.toLocaleDateString(locale,options);
        } else {
            return _date.toLocaleDateString();
        }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

1-我的假设是否正确,PhantomJS v1.9.2不支持ECMAScript internationalization API?无论如何要确认吗?

2-如何解决此问题?我需要通过maven运行我的测试,我将有更多测试以某种方式击中我的本地化服务API.
谢谢

javascript internationalization phantomjs angularjs ecmascript-intl

10
推荐指数
2
解决办法
3612
查看次数

使用Intl API获取时区在Firefox中不起作用:

我正在使用Intl API.在Chrome中:

 Intl.DateTimeFormat().resolved.timeZone
Run Code Online (Sandbox Code Playgroud)

返回"欧洲/伦敦"

在Firefox中undefined,即使Firefox支持Intl,也会返回.

如何获得Firefox的时区?

javascript firefox timezone internationalization ecmascript-intl

10
推荐指数
1
解决办法
6906
查看次数

Edge 15中的"Intl not available"

Intl not available当我的脚本在Edge 15中运行以下代码时,我在JS控制台中看到错误:

new Date().toLocaleDateString()

我有点难过这个.它在Edge 14中工作得很好,我找不到任何对国际化API的引用突然从Edge 15中消失.

我不确定这是否是测试它的正确方法,但window.hasOwnProperty("Intl")在控制台中运行实际上会返回true.对我而言,这似乎表明Intl实际上在那里.

拥有更多JS技能的人能够分辨出这里真正发生的事情吗?

javascript internationalization ecmascript-intl microsoft-edge

10
推荐指数
1
解决办法
980
查看次数

HTML5 Intl API每周的第一天

有没有办法从HTML5国际化API获取一周的第一天(大多数国家的周日或周一)?

规范可以在这里找到.如果它没有以某种方式披露我会感到惊讶,但我似乎无法找到它.

javascript html5 date internationalization ecmascript-intl

7
推荐指数
2
解决办法
786
查看次数

如何使用Intl获取工作日名称?

我想在我的i18n-ed应用程序中显示7个工作日的列表:

Sunday, Monday, Tuesday... Saturday
Run Code Online (Sandbox Code Playgroud)

我靠上国际全局对象格式化的日期/时间,但我无法找到一个简单的方法来获得唯一的工作日名称.

我想我可以在EPOCH时间增加一些时间,以达到一周的第一天,但​​我没有在工作日找到格式化器打印.

var date = new Date(0);
date.setDate(4 + day);
for (var i = 0; i < 7; i++) {
  var weekday = new Intl.DateTimeFormat(["en"], {
      weekday: "short" // ?? what should I put here
  }).format(date);
  console.log(weekday);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Sunday, January 4, 1970
Monday, January 5, 1970
Tuesday, January 6, 1970
Wednesday, January 7, 1970
Thursday, January 8, 1970
Friday, January 9, 1970
Saturday, January 10, 1970
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Sunday
Monday
Tuesday …
Run Code Online (Sandbox Code Playgroud)

javascript internationalization ecmascript-intl

6
推荐指数
3
解决办法
1399
查看次数

Intl.Collat​​or 和带有数字选项的自然排序对十进制数字的排序不正确

Intl.Collator使用和 启用选项对十进制数字进行排序numeric会错误地比较小数。

在某些浏览器上,比较“0.005”和“0.05”会返回“0”,因为数字相同。

不同浏览器中的结果:

  • 铬 54 = 0
  • 火狐 49 = 0
  • 边缘=-1
  • IE 11 = -1

// Returns 0
console.log(new Intl.Collator(undefined, { numeric: true}).compare(0.000005, 0.05))
Run Code Online (Sandbox Code Playgroud)

谁能告诉我出了什么问题吗?

报告为 Firefox 中的错误:https://bugzilla.mozilla.org/show_bug.cgi ?id=1312388

javascript ecmascript-intl

6
推荐指数
1
解决办法
2771
查看次数

有没有办法在ECMAscript Internationalization API中获取小数和千位分隔符?

我正在尝试使用新的Javascript国际化API,并想知道是否有办法获取Intl.NumberFormat实例的小数和千位(分组)分隔符?

resolvedOptions对象上有一个方法,但不提供符号.

如果有人想知道,那么对于en-US来说,这些将是逗号,和句号.,例如in 1,000.00.

javascript internationalization number-formatting ecmascript-5 ecmascript-intl

5
推荐指数
1
解决办法
1984
查看次数

Intl API 从哪里获取时区列表?

我依赖于Intl确定用户的时区。

我还想为用户提供一种选择时区的方法。我有一个时区列表——Olson 数据库的一些子集。

我想确保Intl不会给我一些我列表中没有的奇怪时区。

Intl API 从哪里获取时区列表?有没有办法列出所有这些或者它是否信任浏览器?

javascript ecmascript-intl

5
推荐指数
1
解决办法
3127
查看次数

使用JS Intl符号后的空格

我想用Intl的NumberFormat格式化货币,并获得返回值,在符号和数字之间加一个空格"".

new Intl.NumberFormat('pt-br', { style: 'currency', currency: 'USD' }).format(12345)
// "US$12.345,00"
new Intl.NumberFormat('pt-br', { style: 'currency', currency: 'BRL' }).format(12345)
// "R$12.345,00"
Run Code Online (Sandbox Code Playgroud)

我想要的是:"US $ 12.345,00","R $ 12.345,00"

有任何想法吗?

javascript number-formatting ecmascript-6 ecmascript-intl

5
推荐指数
1
解决办法
1620
查看次数

Number.prototype.toLocaleString() 和 Intl.NumberFormat.prototype.format 有什么关系?

我们正在尝试在我们的应用程序中使用本地化支持并查看toLocaleString(). 我们还查看了Intl.NumberFormat它的格式化方法。

他们有什么关系吗?哪个更好用?

javascript localization number-formatting ecmascript-intl

4
推荐指数
1
解决办法
2511
查看次数

指定的时区无效:美国/阿拉斯加、美国/亚利桑那、美国/山区、美国/中部等 Chrome 中的错误但在 Mozilla 中工作

我试图将时间戳转换为不同时区的本地时间,发现某些 TimeZone 在 Chrome (v76.0.38) 中不支持,但在 Mozilla (v68.0.2) 中工作正常。

  let d = new Date(1567083463);
  let n = d.toLocaleString('en-GB', { timeZone: "US/Arizona" });
  
Run Code Online (Sandbox Code Playgroud)

未捕获的 RangeError:指定的时区无效:美国/亚利桑那州

在 Date.toLocaleString()

其他几个时区也抛出同样的错误

US/Alaska US/Mountain US/Central US/East-Indiana

这些时区得到官方支持,如其网站 Chrome Supported Time Zone Values 中所述

javascript timezone google-chrome ecmascript-intl

4
推荐指数
1
解决办法
5889
查看次数