【问题标题】:Get time format according to spreadsheet locale?根据电子表格区域设置获取时间格式?
【发布时间】:2020-05-10 06:24:01
【问题描述】:

我想根据电子表格的语言环境 (SpreadsheetApp.getActive().getSpreadsheetLocale()) 将 Javascript Date() 对象存储在格式正确的电子表格中。
有没有办法从电子表格语言环境中获取特定于国家/地区的(日期和)时间格式字符串?
例如。当语言环境为 de_DE 时,时间格式字符串为hh:mm
但当语言环境为 da_DK 时,时间格式字符串为 hh.mm
如何获取国家/地区货币格式也很有趣。

顺便说一句,当我在de_DE 中有日期和时间而不是更改为da_DK 时,日期被重新格式化(23.01.2020 -> 23/01/2020)但时间不是(它保持为22:59)。这是电子表格中的错误吗?

【问题讨论】:

    标签: datetime google-apps-script google-sheets locale number-formatting


    【解决方案1】:

    我不太清楚你提到的工作表的配置。但是,我共享一个代码,用于打印表单数据提交的日期和时间。

    var d = new Date();
    var hour = d.getHours()-1;
    var min = d.getMinutes();
    var day = d.getDate();
    var month = d.getMonth()+1;
    var year = d.getFullYear();
    
    if (month<10) {dia = day+"/"+"0"+month+"/"+year;}
     else {dia = day+"/"+month+"/"+year;}
     if (min<10){time = hour+":"+"0"+min;}
     else {time = hour+":"+min;}
    

    我在代码中做的是取日、月、年的值,我把月的值加1,因为它取值[0:11] => [Jan, Dec]。 然后我从日期和时间构建我想要的格式,你可以注意到我还剩 1 到小时,因为当我做测试时,我注意到脚本的时间是一小时以上。

    我用谷歌翻译,希望能理解。

    【讨论】:

    • 谷歌翻译非常好。但我的问题是关于日期和时间“格式”。在您的语言环境中,“/”是日期部分之间的分隔符,“:”是部分时间之间的分隔符。在丹麦语言环境中,“/”是日期分隔符,“.”是日期分隔符。是时间分隔符。在德语语言环境中,“。”是日期分隔符,“:”是时间分隔符。我正在寻找一种方法来找出每个语言环境的分隔符。
    【解决方案2】:

    JavaScript 中的日期有toLocaleDateString 方法,它返回一个根据指定区域设置格式化的字符串。但这似乎不适用于 Apps 脚本。

    如果您愿意为此使用Apps Script Web App,您可以在客户端脚本中使用toLocaleDateString(即在您的HTML 中的脚本标记中)。

    如果不是这样,我认为您最好的选择是自己创建格式和语言环境之间的关系,因为 Apps 脚本没有内置方法来实现这一点。例如,您可以使用 switch 语句来检查语言环境,然后使用 Utilities.formatDate(Apps 脚本用于格式化日期的工具)相应地格式化日期。可能是这样的:

    var locale = SpreadsheetApp.getActive().getSpreadsheetLocale();
    var formattedDate;
    switch (locale) {
      case 'de_DE':
        formattedDate = Utilities.formatDate(yourDate, yourTimeZone, "hh:mm");
        break;
      case 'da_DK':
        formattedDate = Utilities.formatDate(yourDate, yourTimeZone, "hh.mm");
        break;
        // ...
    }
    return formattedDate;
    

    参考:

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      很抱歉,但是我发现了一个值得一试的函数,它是 toLocaleDateString() 和 toLocaleTimeString(),它们提供本地日期和时间格式。 请检查 Formato fechas JavaScript.

      我使用 Google Apps Script 进行了测试,结果如下

      function pruebafecha() {
        var d = new Date();
        var n = d.toLocaleDateString();
        var h = d.toLocaleTimeString();
        Logger.log(n);
        Logger.log(h);
      }
      
      This is the answer(Colombia): 
      [20-01-24 16:47:50:286 EST] 24 de enero de 2020
      [20-01-24 16:47:50:287 EST] 16:47:50 EST
      

      【讨论】:

      • toLocaleTimeString() 不关心工作表中设置的语言环境。
      【解决方案4】:

      JavaScript Date 对象包括日期、时间和时区。当 Google Apps 脚本使用 setValue() / setValues() 将 Date 对象传递给电子表格时,该值将根据使用电子表格时区的单元格编号格式显示。

      如果默认情况下将单元格格式设置为“自动”,则日期将根据电子表格区域设置显示。

      如果您想强制单元格以特定格式显示日期,请使用 Class Range setNumberFormat / setNumberFormats

      如果您不想使用上述方法并且不想依赖电子表格区域设置和自动单元格格式,那么不要传递 Date 对象,而是将值作为字符串传递,并在其前面加上 ' (撇号,单引号字符)以防止自动数据类型解析更改值及其格式。

      相关

      Javascript in Google Sheets script: help using setNumberFormat

      【讨论】:

      • 当我传递一个 Date 对象时,单元格显示的是日期,而不是时间。但我希望显示时间(小时和分钟,没有秒),而不是日期。我寻找一种避免setNumberFormat(...) 的方法,因为格式字符串取决于区域设置,或者根据电子表格的区域设置检索该格式字符串的方法。
      • “但我希望显示时间.. 不是日期”问题没有说明,因此您可以编辑问题或发布新问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2011-03-15
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      相关资源
      最近更新 更多