Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

166
Views
¿Cómo obtener el nombre de zona horaria canónica de un alias de zona horaria?

Me gustaría crear una función que convierta los nombres de los alias de la zona horaria en el nombre canónico de dicha zona horaria.

Estado de las zonas horarias de Wikipedia

Por ejemplo, si tuviera Africa/Accra , me gustaría poder buscar que Africa/Abidjan es el nombre canónico de la zona horaria.

 function getCanonicalName(name) { // TODO } getCanonicalName('Africa/Accra'); // => 'Africa/Abidjan'

Cosas que he investigado por mi cuenta

Intenté usar moment-timezone y luxon para analizar el nombre de la zona, pero no parece haber una forma de aplicar ingeniería inversa a la zona horaria canónica como parte de estas bibliotecas.

De acuerdo con los documentos moment-timezone , puede obtener el nombre canónico de una zona horaria de la representación de datos "empaquetados", pero al observar la implementación del pack en su código fuente, parece que solo pasa el source.name .

luxon tiene un ayudante de normalizeZone , pero parece que solo devuelve una instancia de Zone de una amplia gama de tipos de entrada. Sin embargo, no normaliza el nombre de la zona. Hay un indicador isUniversal en luxon Zone s, pero este indicador parece estar relacionado con el horario de verano, no con el estado de la zona horaria.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Es posible que esto no reconozca esa zona específica como un alias desde que se actualizó en septiembre de 2021 :

Pero en general:

 import moment from 'moment'; import momenttz from 'moment-timezone'; // From moment-timezone, but not exported function normalizeName (name) { return (name || '').toLowerCase().replace(/\//g, '_'); } function getCanonicalName(name) { const normalizedName = normalizeName(name); // A canonical zone might exist if (moment.tz._zones[normalizedName]) { return moment.tz._names[normalizedName]; } // If not, there'll be a link to a canonical name const canonicalZoneNormalized = moment.tz._links[normalizeName(name)]; // And return the friendly name return moment.tz._names[canonicalZoneNormalized]; } console.log(getCanonicalName('Pacific/Wallis')); // => Pacific/Tarawa console.log(getCanonicalName('Pacific/Tarawa')); // => Pacific/Tarawa
about 4 years ago · Juan Pablo Isaza Report

0

Dado que la base de datos de zona horaria se actualiza solo una vez al año, creo que mi solución requiere poco mantenimiento. Estoy siguiendo un enfoque muy crudo aquí. En realidad, puede obtener la información que se muestra en la página de wikipedia en un JSON primero y luego obtener un mapa que contenga todas las zonas horarias y sus zonas horarias canónicas ejecutando esto en la consola del navegador:

 const keys = []; const timezones = []; $("table:first thead tr th").each(function () { keys.push($(this).text().replace(/\n/g, '')); }); $("table:first tbody tr").each(function () { const obj = {}; let i = 0; $(this).children("td").each(function () { obj[keys[i]] = $(this).text().replace(/\n/g, ''); i++; }); timezones.push(obj); }); const canonicalTimezones = Object.assign({}, ...timezones.map(x => ({ [x['TZ database name']]: (x['Type'] === 'Canonical' ? x['TZ database name'] : x['Notes'].substring(8)) }))); JSON.stringify(canonicalTimezones);

Puede guardar la salida en un archivo en algún lugar. Y luego solo necesita analizarlo en su código y obtener fácilmente la zona horaria canónica respectiva.

 import canonicalTimezones from './canonicalTimezones.json'; function getCanonicalName(name) { return canonicalTimezones[name]; }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!