簡體   English   中英

如何使用人性化日期在 JS 中獲得本地化的持續時間?

[英]How using humanized date can I get localized duration in JS?

我有以下日期的 JSON 對象:

[
  {
    "date_start": "septembre 2019",
    "date_end": "septembre 2020"
  },
  {
    "date_start": "juin 2017",
    "date_end": "avril 2019"
  },
  {
    "date_start": "novembre 2015",
    "date_end": "Aujourd'hui"
  },
  {
    "date_start": "novembre 2012",
    "date_end": "février 2015"
  },
  {
    "date_start": "novembre 2011",
    "date_end": "octobre 2012"
  }
]

我想將這些人性化的日期轉換為en_USfr_FR的本地化持續時間。

這是en_US的預期結果

持續時間語法不必嚴格使用本示例中的語法!

[
  {
    "date_start": "september 2019",
    "date_end": "september 2020",
    "duration": "1 yrs 1 mo"
  }
]

我正在查看date-fns ,到目前為止我還沒有找到如何去做。 (我還檢查了momentjs )。

有誰知道我如何在人性化的持續時間內轉換那些? 我認為這應該首先轉換為日期。

您可以使用這個簡單的純 JS 代碼。

這個怎么運作:

frStringToDate()函數將您的字符串轉換為 Date 對象。 它首先檢查字符串格式,然后從中獲取法語月份名稱和年份。 然后它將(使用months對象)法語月份名稱轉換為英文 3 個字符的月份縮寫,最終為Date構造函數創建一個可讀的字符串。

calculateDuration()函數減去兩個日期並將結果(以毫秒為單位)“轉換”到Date對象。 我們知道, new Date(0)Jan 1, 1970 ,所以我們可以從結果Date對象的年份中減去 1970 。 要獲得月份,我們需要將.getMonth()函數的結果加1 ,因為月份是從 0 開始編號的。然后我們可以返回結果字符串。

getDurationFromObj()只是為了代碼可讀性

 const months = { 'janvier': 'jan', 'février': 'feb', 'mars': 'mar', 'avril': 'apr', 'mai': 'may', 'juin': 'jun', 'juillet': 'jul', 'août': 'aug', 'septembre': 'sep', 'octobre': 'oct', 'novembre': 'nov', 'décembre': 'dec' } const dates = [{ "date_start": "septembre 2019", "date_end": "septembre 2020" }, { "date_start": "juin 2017", "date_end": "avril 2019" } ] function frStringToDate(frDateString) { const matched = frDateString.match(/^(\\w+) (\\d{4})$/) if (matched) { const frMonth = matched[1] const year = matched[2] const enMonth = months[frMonth] if (!enMonth) return null return new Date(`${enMonth} ${year}`) } return null } function calculateDuration(date1, date2) { const durationMillis = date1 < date2 ? date2 - date1 : date1 - date2 const durationDate = new Date(durationMillis) const years = durationDate.getFullYear() - 1970 const months = durationDate.getMonth() + 1 return `${years} yrs ${months} mo` } function getDurationFromObj(obj) { const date1 = frStringToDate(obj.date_start) const date2 = frStringToDate(obj.date_end) return calculateDuration(date1, date2) } dates.forEach(obj => console.log(getDurationFromObj(obj)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM