首页 > 解决方案 > 在服务器上获取“१:१३:१२”类型的持续时间。有什么办法可以将其更改为“01:13:12”?

问题描述

我收到的请求格式错误(即१:१३:१२)的持续时间。当我尝试插入 Postgres 数据库时,它显示的是预期的DateTimeParseError 。

我们可以在服务器端更改这种(१:१३:१२)类型的实际持续时间格式(01:13:12)HH:MM:SS?

标签: javascriptnode.jsduration

解决方案


是的,这是可能的。

方法 1 - 简短的脏修复 - 计算您的数字字符集和拉丁数字字符之间的差异并替换它们。然后只需填写缺少的“0”
请参见下面的代码(它适用于您的示例,但我不对输入字符串进行任何验证,这取决于您)

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);
}


推荐阅读