Cuando se trabaja con fechas, las localiza automáticamente, es decir, mi fecha local sería YYYY-MM-DD mientras que con la configuración regional en-US . recibiría DD/MM/YY .
Cuando trabajo con length , area , weight , volume , temperature , time y sus unidades compuestas como length-per-time , no puedo encontrar una función similar en la API internacional. Estuve buscando especificaciones y github durante todo el día, pero lo más parecido que encontré fue https://github.com/tc39/ecma402/issues/32 :
var f = Intl.UnitFormat(navigator.languages, { units: { {type: 'length', unit: 'bestFit'}, } }); f.format(2048); // would return '2 km' in en-USQue parece haber desaparecido después de fusionarse con "Intl.NumberFormat rev. 2".
Entonces, ¿hay alguna manera de evitar mapear cada localidad existente con cada unidad existente como en este ejemplo?:
const format = unit => value => new Intl.NumberFormat("en", { style: "unit", unit, notation: "compact", maximumSignificantDigits: 3 }) .format(value) function fakeBestFit(value, locale) { // if US or any other imeprial system based locale if (locale || navigator.language === 'en-US') { const mile = 1609.34 const yard = 0.9143977272588 // const inch = ... // const foot = ... if (value >= mile) { return format("mile")(value / mile) } else if (value >= yard) { return format("yard")(value / yard) } else { // other units for locale ie inches and feet } } else { // for metric countries return format("meter")(value) } } console.log('expected: 1 m, received: ' + fakeBestFit(1)) console.log('expected: 1 km, received: ' + fakeBestFit(1000)) console.log('expected: 1 Mm, received: ' + fakeBestFit(1000000)) console.log('expected: 1 cm, received: ' + fakeBestFit(0.001)) console.log('expected: 1 mi, received: ' + fakeBestFit(1609.34, 'en-US')) console.log('expected: 1 yd, received: ' + fakeBestFit(0.9143977272588, 'en-US'))