![](/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.