如何在Javascript中将字符串转换为日期?

时间:2019-03-21 02:20:17

标签: javascript arrays date

我有从网站检索的字符串日期列表。

const appDate = await page.evaluate(() => {
  const dates = Array.from(document.querySelectorAll('li.det-comment-list-every div.comment-date'))
  return dates.map(font => font.textContent) 
});

我试图在for循环中将它们转换为Date对象。

appDate 数组的示例:

  

['2018/8/22 13:52','2018/5/11 22:36','2018/7/20 07:13','2018/5/30   04:04','2018/3/26 18:21','2019/3/20 17:46','2019/3/18 13:01',   '2019/3/18 07:27','2019/3/17 23:10','2019/3/17 20:39']

let nDates = [];
for(let date of appDate){
  var d = new Date(date);
  nDates.push(d);
}
console.log(nDates);

但是,控制台会给我“无效日期”。

  

[无效的日期,     失效日期,     失效日期,     失效日期,     失效日期,     失效日期,     失效日期,     失效日期,     失效日期,     日期无效]

如何获取日期以转换为日期格式?

2 个答案:

答案 0 :(得分:0)

您可能已经将for..offor..in混淆了,反之亦然。您必须小心使用for..in迭代数组,它还会遍历对象的可枚举属性。尝试这样做:

[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);

public static void StartDrag(Window window)
{
    WindowInteropHelper helper = new WindowInteropHelper(window);
    SendMessage(helper.Handle, 161, 2, 0);
}

如果您坚持使用for..in循环,则需要通过其键值对进行迭代:

const dates = ['2018/8/22 13:52', '2018/5/11 22:36', '2018/7/20 07:13', '2018/5/30 04:04', '2018/3/26 18:21', '2019/3/20 17:46', '2019/3/18 13:01', '2019/3/18 07:27', '2019/3/17 23:10', '2019/3/17 20:39' ]
        
const nDates = [];
for(let date of dates){
  const d = new Date(date);
  nDates.push(d);
}
console.log(nDates);

或者更好,一种更短的单线方法:

const nDates = [];
for(let index in dates){
  const d = new Date(dates[index]);
  nDates.push(d);
}
console.log(nDates);

答案 1 :(得分:0)

这是错误使用for..in ..循环的情况。如果您尝试将日期登录到for in循环中,则会看到该日期实际上是元素的索引。

var appDate = ['2018/8/22 13:52', '2018/5/11 22:36', '2018/7/20 07:13', '2018/5/30 04:04', '2018/3/26 18:21', '2019/3/20 17:46', '2019/3/18 13:01', '2019/3/18 07:27', '2019/3/17 23:10', '2019/3/17 20:39' ]

let nDates = [];

for(let date in appDate){
   console.log(date);  // 0 1 2 3 4 5 6 7 8 9
   var d = new Date(date);
   nDates.push(d);
}

您可以使用for..of或任何其他for循环或映射来获取转换后的日期。

现在,您已经更新了问题,请通过将其记录在循环中来验证dates数组包含有效日期。