如何将YYYYMM格式化为javascript日期?

如何将YYYYMM格式化为javascript日期?,javascript,Javascript,我正在处理YYYYMM格式的数据库数据。我希望以javascript的形式展示它以供分析。我已经阅读了Intl.DateTimeFormat的文档,并正在尝试它。然而,它似乎没有正确地解释它 示例日期为2017年1月的201701 console.log('201701') console.log(new Intl.DateTimeFormat('en-US').format('201701')); // Will give 12/31/1969 oddly enough 如何使用YYYYM

我正在处理YYYYMM格式的数据库数据。我希望以javascript的形式展示它以供分析。我已经阅读了Intl.DateTimeFormat的文档,并正在尝试它。然而,它似乎没有正确地解释它

示例日期为2017年1月的
201701

console.log('201701')
console.log(new Intl.DateTimeFormat('en-US').format('201701'));  // Will give 12/31/1969 oddly enough

如何使用YYYYMM格式格式化日期?我还没有在网上看到这个问题的任何答案,这似乎是数据库中非常常见的日期格式。我使用的是香草Javascript,不想使用moment.js,因为它满足了我的需求。

您可以尝试以下内容:

dateStr = '201701'

date = new Date(dateStr.slice(0, 4) + '-' + dateStr.slice(4)) // Sun Jan 01 2017 02:00:00 GMT+0200 (Eastern European Standard Time)
const year=“201701”。切片(0,4)
const month=“201701”。切片(4,6)
const dateObject=新日期(parseInt(年)、parseInt(月)-1)

console.log(dateObject)
您可以尝试以下方法:

const year=“201701”。切片(0,4)
const month=“201701”。切片(4,6)
const dateObject=新日期(parseInt(年)、parseInt(月)-1)
console.log(dateObject)
我认为它可以帮助:

let dateStr = '201701'
let year = dateStr.substring(0,4)
let month = parseInt( dateStr.substring(4,6) ) - 1

console.log(new Date(year, month))
我认为这有助于:

let dateStr = '201701'
let year = dateStr.substring(0,4)
let month = parseInt( dateStr.substring(4,6) ) - 1

console.log(new Date(year, month))

您可以编写一个简单的日期分析器

只需找到特定令牌的开始/结束索引。它也是可扩展的。您可以轻松添加对时间的支持

const parseDate=(dateStr,格式)=>{
const FMT_YEAR='Y',
FMT_月='M',
FMT_日期='D'
常量标记=(str,startIndex,endIndex)=>startIndex!==endIndex?
parseInt(str.substring(startIndex,endIndex+1),10):0
设yearStartIndex=format.indexOf(FMT_YEAR),
yearEndIndex=format.lastIndexOf(FMT_YEAR),
monthStartIndex=format.indexOf(FMT_月),
monthEndIndex=format.lastIndexOf(FMT_月),
dateStartIndex=format.indexOf(FMT_日期),
dateEndIndex=format.lastIndexOf(FMT_日期)
让year=token(dateStr、yearStartIndex、yearEndIndex),
月份=令牌(dateStr、monthStartIndex、monthEndIndex)-1,
日期=标记(dateStr、dateStartIndex、dateEndIndex)| 1
返回新日期(年、月、日)
}

log(parseDate('201701','yyyyymm').toString())
您可以编写一个简单的日期解析器

只需找到特定令牌的开始/结束索引。它也是可扩展的。您可以轻松添加对时间的支持

const parseDate=(dateStr,格式)=>{
const FMT_YEAR='Y',
FMT_月='M',
FMT_日期='D'
常量标记=(str,startIndex,endIndex)=>startIndex!==endIndex?
parseInt(str.substring(startIndex,endIndex+1),10):0
设yearStartIndex=format.indexOf(FMT_YEAR),
yearEndIndex=format.lastIndexOf(FMT_YEAR),
monthStartIndex=format.indexOf(FMT_月),
monthEndIndex=format.lastIndexOf(FMT_月),
dateStartIndex=format.indexOf(FMT_日期),
dateEndIndex=format.lastIndexOf(FMT_日期)
让year=token(dateStr、yearStartIndex、yearEndIndex),
月份=令牌(dateStr、monthStartIndex、monthEndIndex)-1,
日期=标记(dateStr、dateStartIndex、dateEndIndex)| 1
返回新日期(年、月、日)
}

log(parseDate('201701','yyyyymm').toString())
是否类似于此依赖于实现?在我的系统firefox上,我得到12月31日。特别是,我得到的日期是2016年12月31日星期六19:00:00 GMT-0500(东部标准时间)。我明白了!类似这样的东西是否依赖于实现?在我的系统firefox上,我得到12月31日。特别是,我得到的日期是2016年12月31日星期六19:00:00 GMT-0500(东部标准时间)。我明白了!为我运行这个代码片段会让2016年12月31日变得足够古老。这是基于我的浏览器吗?是的,因为它在您的浏览器上运行取决于您的计算机区域设置。我看到“2017-01-31T21:00:00.000Z”为我运行此代码段时,2016年12月31日已经足够古老了。这是基于我的浏览器吗?是的,因为它在您的浏览器上运行取决于您的计算机区域设置,我看到“2017-01-31T21:00:00.000Z”我将此标记为答案,因为它每次都给我正确的输出。其他答案保留了上个月的答案,而没有减去前一个月给我的答案。我从这个答案中意识到的是我可能在其他地方看到的:月份似乎是以0为基础的,所以01->1->2月,其中0是1月,这非常令人困惑。我对使用月份日期的人的建议是,如果他们得到下一个月的日期,他们需要查看0是否被解释为1月份,并将其标记为答案,因为它每次都给我正确的输出。其他答案保留了上个月的答案,而没有减去前一个月给我的答案。我从这个答案中意识到的是我可能在其他地方看到的:月份似乎是以0为基础的,所以01->1->2月,其中0是1月,这非常令人困惑。我对使用月份日期的人的建议是,如果他们得到下一个月,他们需要查看0是否被解释为一月