如何使用Intl.DateTimeFormat在javascript中定义特定日期表示法[duplicate]

btxsgosb  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(120)
    • 此问题在此处已有答案**:

How do I format a date in JavaScript?(67个答案)
3天前关闭。
看到JavaScript没有一个易于使用的日期格式是如此令人惊讶。
我正在尝试获取此格式(python中的示例)

>>> datetime.now().strftime("%Y%m%d")
'20221228'

我确实发现Intl.DateTimeFormat可以对Date()对象做一些格式化,但是我不知道如何用它来做一个自定义格式。
有一些固定的格式en-USen-GB,定义一个格式会很好。

> var dateOptions = {year:'numeric', month:'numeric', day:'numeric'}
> console.log( Intl.DateTimeFormat('en-GB', dateOptions).format(Date.now()))

28/12/2022

> console.log( Intl.DateTimeFormat('en-US', dateOptions).format(Date.now()))

12/28/2022

它部分地控制格式,但是有人知道如何用Intl.DateTimeFormat实际控制输出格式以输出YYYYMMDD吗?

2uluyalo

2uluyalo1#

基于@HereticMonkey,这是我用核心JavaScript破解的。无法想象为什么Intl.DateTimeFormat不能自定义格式。这是基本需求。

function toYYYYMMDD(date){
    let dateFields = {}
    let options = {
        year: 'numeric',
        month: 'numeric',
        day: 'numeric'
    }
    let formatDate = new Intl.DateTimeFormat('en-US', options )
    formatDate.format(date)
    let parts = formatDate.formatToParts()

    for (var i = 0; i < parts.length; i++) {
        dateFields[parts[i].type] = parts[i].value;
    }
    return dateFields.year + dateFields.month + dateFields.day
}

toYYYYMMDD(new Date())
'20221228'

EDIT这种方式也很蹩脚,因为它不能将时间转换为本地时间,而且代码太多。

我最后选择了Luxon,这很容易。

luxon.DateTime.local(2022, 12, 28, 08, 00, 00).toFormat("yyyyMMdd")
"20221228" 

luxon.DateTime.local(2022, 12, 28, 18, 00, 00).toFormat("[yyyyMMMdd] HH:mm")
"[2022Dec28] 18:00"

时间是24或12小时

luxon.DateTime.local(2022, 12, 28, 18, 00, 00).toFormat("hh:mm a")
"06:00 PM"
luxon.DateTime.local(2022, 12, 28, 18, 00, 00).toFormat("HH:mm")
"18:00"

相关问题