我正在尝试将date(integer)转换为字符串。例如,从2019年1月1日开始,我的输出应为1月1日。我编写了以下代码。
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年1月1日),它给我的输出为01年12月而不是1月1日,而对于其他日期,我得到的输出是完美的( '2019-01-02'= 2月1日,'2019-01-03'= 3月1日,依此类推)。
提前谢谢
答案 0 :(得分:1)
您可以尝试以下优化版本:
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 = [];
dateArray = [];
dates.forEach(function(elem) {
let localDate = new Date(elem).toDateString().split(' ');
dateArray.push(localDate[2]+' '+localDate[1]);
});
console.log(dateArray);
这是如何工作的: 让我们以'2019-01-01'
获得列表后,只需将其洗牌并加以利用即可。
希望对您有帮助。
答案 1 :(得分:1)
问题
您的日期没有时间,因此当您将它们转换为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);