我正在尝试将日期(整数)转换为字符串。例如,从 2019-01-01 开始,我的输出应该是 01 Jan。我编写了下面的代码。
const dates = ['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08', '2019-01-09'];
let months = [];
let day = [];
let t_stamp = [];
for (let i = 0; i < dates.length; i++) {
let obj = new Date(dates[i]);
months.push(obj.toLocaleString("en-us", {
month: "short"
}));
let con = dates[i].split('-');
day.push(con[2]);
console.log(con);
}
for (let i = 0; i < day.length; i++) {
t_stamp[i] = day[i] + '-' + months[i];
}
这段代码几乎可以正常工作,唯一的问题是,对于第一个日期(2019-01-01),它给我的输出为 12 月 1 日而不是 1 月 1 日,而对于其余日期,我得到了完美的输出( “2019-01-02”= 1 月 2 日,“2019-01-03”= 1 月 3 日,依此类推)。
提前谢谢
最佳答案
问题
您的日期没有时间,因此当您将它们转换为 Date
对象时,它们会使用时间 00:00:000
UTC 进行实例化。由于 toLocaleString()
随后会将时间转换为用户的本地时间,因此这很可能会导致日移。
例如,我的时区是 UTC -4,因此您的日期 2019-01-01 00:00:000 UTC
变为 2018-12- 31 19:00:000 EST
对我来说。
解决方案
您根本不需要转换为Date
。如果您拆分原始字符串,您就已经获得了所需格式的day
。唯一的工作是将月份转换为其缩写名称。一个简单的查找数组就可以解决问题。
const dates = ['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08', '2019-01-09'];
const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
const result = dates.map(d => {
let [year,month,day] = d.split('-');
return `${day}-${months[month-1]}`;
});
console.log(result);
关于javascript - 无法将所有整数日期转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56535962/