我有从网站检索的字符串日期列表。
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);
但是,控制台会给我“无效日期”。
[无效的日期, 失效日期, 失效日期, 失效日期, 失效日期, 失效日期, 失效日期, 失效日期, 失效日期, 日期无效]
如何获取日期以转换为日期格式?
答案 0 :(得分:0)
您可能已经将for..of与for..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数组包含有效日期。