我最近发现JavaScript有一个新的扩展.这增加了一些功能,可以在Date对象中toLocaleString,toLocaleDateString和toLocaleTimeString功能. 参考这里.
我对timeZone支持IANA/Olson时区的选项特别感兴趣,例如America/New_York或Europe/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)
这是非常酷,但我有几个问题:
这主要关注输出,但我如何将其用于输入?有没有办法将构造函数中的时区传递给Date …
javascript timezone google-chrome internationalization ecmascript-intl
我正在寻找ECMAScript国际化API的垫片.有谁知道这样的项目?(即使它目前仍在进行中.)
javascript internationalization ecma262 ecmascript-5 ecmascript-intl
我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
我正在使用Intl API.在Chrome中:
Intl.DateTimeFormat().resolved.timeZone
Run Code Online (Sandbox Code Playgroud)
返回"欧洲/伦敦"
在Firefox中undefined,即使Firefox支持Intl,也会返回.
如何获得Firefox的时区?
javascript firefox timezone internationalization ecmascript-intl
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
有没有办法从HTML5国际化API获取一周的第一天(大多数国家的周日或周一)?
规范可以在这里找到.如果它没有以某种方式披露我会感到惊讶,但我似乎无法找到它.
我想在我的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) Intl.Collator使用和 启用选项对十进制数字进行排序numeric会错误地比较小数。
在某些浏览器上,比较“0.005”和“0.05”会返回“0”,因为数字相同。
不同浏览器中的结果:
// 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国际化API,并想知道是否有办法获取Intl.NumberFormat实例的小数和千位(分组)分隔符?
resolvedOptions对象上有一个方法,但不提供符号.
如果有人想知道,那么对于en-US来说,这些将是逗号,和句号.,例如in 1,000.00.
javascript internationalization number-formatting ecmascript-5 ecmascript-intl
我依赖于Intl确定用户的时区。
我还想为用户提供一种选择时区的方法。我有一个时区列表——Olson 数据库的一些子集。
我想确保Intl不会给我一些我列表中没有的奇怪时区。
Intl API 从哪里获取时区列表?有没有办法列出所有这些或者它是否信任浏览器?
我想用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"
有任何想法吗?
我们正在尝试在我们的应用程序中使用本地化支持并查看toLocaleString(). 我们还查看了Intl.NumberFormat它的格式化方法。
他们有什么关系吗?哪个更好用?
我试图将时间戳转换为不同时区的本地时间,发现某些 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 中所述
ecmascript-intl ×13
javascript ×13
timezone ×3
ecmascript-5 ×2
angularjs ×1
date ×1
ecma262 ×1
ecmascript-6 ×1
firefox ×1
html5 ×1
localization ×1
phantomjs ×1