【问题标题】:d3 locale time formatd3 语言环境时间格式
【发布时间】:2021-09-26 01:00:56
【问题描述】:

我想将我的月份和日期语言更改为我使用 d3 时间格式 v6 的语言。我用了一些方法

方法一:

const localeTime = {
    "days": ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
    "months": ["Januari", "Februari", "Maret", "April", "Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"]
  };
  
  const localeFormat = d3.locale(localeTime);
  
  const formatTime = localeFormat.timeFormat("%d %B %Y");
  
  console.log(formatTime(date));

我收到d3.locale is not a function 错误。然后我改成d3.timeFormatLocaled3.timeFormatDefaultLocale(方法二)

方法二:

const localeTime = {
    "days": ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
    "months": ["Januari", "Februari", "Maret", "April", "Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"]
  };
  
  const localeFormat = d3.timeFormatLocale(localeTime);
  
  const formatTime = localeFormat.timeFormat("%d %B %Y");
  
  console.log(formatTime(date));

我收到此错误

Cannot read property 'map' of undefined
    at wy (VM25 d3.min.js:2)
    at Object.py [as timeFormatLocale] (VM25 d3.min.js:2)

当我不使用语言环境作为格式化程序时,由于语言环境定义,格式仍然无法正常工作

const localeTime = d3.timeFormatLocale({
    "days": ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
    "months": ["Januari", "Februari", "Maret", "April", "Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"]
  });
  
  const formatTime = d3.timeFormat("%d %B %Y"); //I don't use the locale this time
  
  console.log(formatTime(date)); //It should be normally formatted as English date, but is not

我仍然收到Cannot read property 'map' of undefined 错误。当我删除语言环境定义时,格式化程序在英语中可以正常工作

https://codepen.io/louislugas/pen/OJmmzwd上的完整代码

【问题讨论】:

    标签: d3.js locale time-format


    【解决方案1】:
    1. 首先,您缺少一些定义 d3.timeFormatLocale(definition),

    根据documentation,定义必须包含以下属性:

    • dateTime - 日期和时间 (%c) 格式说明符(例如,“%a %b %e %X %Y”)。
    • date - 日期 (%x) 格式说明符(例如,“%m/%d/%Y”)。
    • time - 时间 (%X) 格式说明符(例如,“%H:%M:%S”)。
    • periods - 上午和下午等价物(例如,["AM", "PM"])。
    • days - 工作日的全名,从星期日开始。
    • shortDays - 工作日的缩写名称,从星期日开始。
    • months - 月份的全名(从一月开始)。
    • shortMonths - 月份的缩写名称(从一月开始)。
    1. 其次,最好使用自定义名称来防止它使用预定义的名称/变量。

    如果以下代码适合您,请告诉我:

    你可以简单地修改里面的属性

    var ID_Time = {
            "dateTime": "%d %B %Y",
            "date": "%d.%m.%Y",
            "time": "%H:%M:%S",
            "periods": ["AM", "PM"],
            "days": ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
            "shortDays": ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"],
            "months": ["Januari", "Februari", "Maret", "April", "Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],
            "shortMonths": ["Januari", "Februari", "Maret", "April", "Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"]
      };
      
    var IDTime = d3.timeFormatDefaultLocale(ID_Time);
      
    var customformatTime = d3.timeFormat("%d %B %Y");
      
    console.log(customformatTime(maxDate));
    

    【讨论】:

    • 非常感谢,我没有仔细阅读
    • @louislugas 解决了您的问题吗?别客气!很高兴它有帮助。
    • 是的,我没有阅读“必须包含”部分
    猜你喜欢
    • 2016-03-29
    • 2022-07-28
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多