![](/img/trans.png)
[英]How can I get future date month and year by inputting opening date and duration month using JavaScript
[英]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_US
和fr_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.