Получение типа длительности «१:१३:१२» на сервере. Есть ли способ изменить его на «01:13:12»? - PullRequest
2 голосов
/ 03 апреля 2019

Я получаю длительность в неправильном формате (т.е. १: १३: १२ ) с запросом. Когда я пытаюсь вставить в базу данных Postgres, он показывает DateTimeParseError , что ожидается.

Можем ли мы изменить этот ( १: १३: १२ ) тип продолжительности в формате фактической продолжительности, например: ( 01: 13: 12 ) ЧЧ: ММ: СС на сервере сторона

1 Ответ

2 голосов
/ 03 апреля 2019

Да, это возможно.

Метод 1 - короткое грязное исправление - вычислите разницу между вашим набором цифр и латинскими цифрами и замените их. Затем просто заполните пропущенные "0" s
См. Код ниже (это работает для вашего примера, но я не проверяю входную строку, это зависит от вас)

var str = "१:१३:१२";

var offset = "१".charCodeAt(0) - "1".charCodeAt(0);

// replace everything but ":"
var result = str.replace(/[^:]/g, function(el){
  return String.fromCharCode(el.charCodeAt(0) - offset);
})

console.log(result);

result = result.split(":").map(el=>el.length === 2? el: "0" + el).join(":");
console.log(result);

Метод 2 - рекомендуется - используйте локали при создании строки продолжительности, например: если у вас есть доступ к Data объекту вашей продолжительности, вы можете использовать Intl.DateTimeFormat и получить строку с латинской системой нумерации : "nu-latin" часть в строке локали.
Примечание: если вы используете некоторую библиотеку для создания продолжительности, возможно, есть какой-то способ установить языковой стандарт

var date = new Date()

logLocaleDate("en-u-nu-deva-hc-h24")
logLocaleDate("en-u-nu-latin-hc-h24")

function logLocaleDate(locale){
  var res = (new Intl.DateTimeFormat(locale, {hour: "2-digit", minute: "2-digit", second:"2-digit"}).format(date))

  console.log(res);
}
...