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

标签 javascript arrays date

我正在尝试将日期(整数)转换为字符串。例如,从 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/

相关文章:

android - Flutter 中的时差 (Dart)

javascript - 使用 MomentJS 将日期转换为自然语言

r - 在字符中拆分间隔日期并在 R 中转换为日期

javascript - 用于版本控制的 Google Apps 脚本和源代码工具?

javascript - 如何实现 CSS3 GWT TransitionEnd 监听器

Ruby:如何将数组的数组连接成一个数组

c++ - 主发生器溢出? C++

javascript - 如何使用 node.js 防止导入模块的多个实例?

javascript - node.js模块安装发布Microsoft.Cpp.x 64.Targets(146,5) : error MSB6006: "CL. exe

c# - 为什么 roslyn 在放入数组时将对象包装在结构中?