无法将所有整数日期转换为字符串

时间:2019-06-11 03:10:27

标签: javascript arrays date

我正在尝试将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日,依此类推)。

提前谢谢

2 个答案:

答案 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. 新日期('2019-01-01')-> 2019年1月1日星期二05:30:00 GMT + 0530(印度标准时间)
  2. 新日期('2019-01-01')。toDateString()->“ 2019年1月1日星期二”
  3. 新日期('2019-01-01')。toDateString()。split('')->``[“ Tue”,“ Jan”,“ 01”,“ 2019”]

获得列表后,只需将其洗牌并加以利用即可。

希望对您有帮助。

答案 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);