var d=new Date()后面括号什么意思

本文介绍了Date()函数的应用方法,区分了作为时间函数使用时的格式(带括号)与仅作为日期使用的区别(不带括号)。通过创建一个变量d来实例化新的时间函数,可以轻松获取并显示当前的时间。
 
Date() 这是一个整句  是时间函数的意思 没有()就不是时间函数了  只能成日期了 ,
你那意思就是  建立一个变量为d的新的时间函数,只要输出d就能把当前时间输出了 
// ====== 启用无障碍服务 ====== auto.waitFor(); setScreenMetrics(1236, 2676); // ================ 配置常量 ================ var LIST_PAGE_ID = "recyclerview"; // 滑动控件 var DEPOSIT_ID = "min_deposit_tv"; // 在售控件 ID var NAME_ID = "name_tv"; // 任务名称 var PRICE_ID = "price_tv"; // 定价 var MAX_WAIT_MS = 10000; var CSV_FILE_PATH = '/sdcard/AIM/stock_data.csv'; // 创建目录(使用 Java File API,ES5 安全) var File = java.io.File; var parentDir = new File(CSV_FILE_PATH).getParentFile(); if (!parentDir.exists()) { parentDir.mkdirs(); } // 四舍五入函数 function round(num, digits) { var d = digits || 0; var f = Math.pow(10, d); return Math.round(parseFloat(num) * f) / f; } // 提取第一个数字(整数或小数) function extractNumber(text) { if (text == null || text == undefined) return null; var str = String(text); var match = str.match(/\d+\.?\d*/); return match ? parseFloat(match[0]) : null; } // 字符串标准化:去空格、转小写、清理特殊字符 function normalizeString(str) { if (typeof str !== 'string') str = String(str); return str.trim().toLowerCase() .replace(/\s+/g, ' ') .replace(/[^\w\u4e00-\u9fa5]/g, ''); } // 格式化当前时间为 YYYY-MM-DD HH:MM:SS function formatDateTime() { var now = new Date(); var year = now.getFullYear(); var month = now.getMonth() + 1; var day = now.getDate(); var hour = now.getHours(); var minute = now.getMinutes(); var second = now.getSeconds(); function pad(n) { return n < 10 ? '0' + n : n; } return year + "-" + pad(month) + "-" + pad(day) + " " + pad(hour) + ":" + pad(minute) + ":" + pad(second); } // 等待某个查询条件出现(通用) function waitFor(query, timeout) { var start = new Date().getTime(); var t = timeout || MAX_WAIT_MS; while ((new Date().getTime() - start) < t) { try { var w = query.findOne(1000); if (w) return w; } catch (e) {} sleep(300); } return null; } // 等待某个 id 的控件可见 function waitForVisible(idStr) { var start = new Date().getTime(); while ((new Date().getTime() - start) < MAX_WAIT_MS) { try { var w = id(idStr).findOne(1000); if (w && typeof w.visibleToUser === 'function' && w.visibleToUser()) { return w; } } catch (e) {} sleep(300); } return null; } // 随机睡眠 function randomSleep(min, max) { sleep(Math.random() * (max - min) + min); } // 上滑手势 function swipeUp() { var w = device.width; var h = device.height; var x = w / 2; var y1 = h * 0.8; var y2 = h * 0.3; gesture(500, [x, y1], [x, y2]); sleep(1000); return true; } // 获取商品名称(备用) function getTaskName() { try { var w = id(NAME_ID).findOne(3000); var txt = w ? (w.text() || w.desc() || "未知") : "未知"; log("📋 任务名称: " + txt); return txt; } catch (e) { log("⚠️ 获取名称失败: " + e.message); return "异常"; } } // ====== 主函数:遍历 RecyclerView 并采集数据(防重复记录)====== function main() { var results = []; var recordedKeys = {}; // 模拟 Set,存储 "name@price" 形式的键,防止重复记录 var shouldStopScript = false; while (!shouldStopScript) { var rv = null; try { rv = id(LIST_PAGE_ID).findOne(5000); } catch (e) { console.error("❌ 查找 recyclerview 时出错: " + e.message); } if (!rv) { console.log("⚠️ 未找到列表容器,可能已滑动到底部。"); break; } var children = []; try { children = rv.children(); } catch (e) { console.warn("⚠️ 获取子控件失败,尝试滑动重试: " + e.message); swipeUp(); sleep(3000); continue; } if (children.length === 0) { console.log("⚠️ 当前页面无子控件,尝试滑动..."); swipeUp(); sleep(3000); continue; } var foundValidItemOnPage = false; // 标记当前页是否有符合条件的新项目 for (var i = 0; i < children.length; i++) { var child = children[i]; if (!child || typeof child.findOne !== 'function') { continue; } try { // ===== 提取在售数量 ===== var depositView = child.findOne(id(DEPOSIT_ID)); if (!depositView) continue; var depositText = (depositView.text() || "").trim(); var depositMatch = depositText.match(/\d+/); if (!depositMatch) continue; var depositNum = parseInt(depositMatch[0], 10); if (isNaN(depositNum) || depositNum <= 500) continue; // ===== 提取商品名称 ===== var nameView = child.findOne(id(NAME_ID)); var itemName = "未知"; if (nameView) { var rawName = nameView.text(); if (typeof rawName === 'string' && rawName.trim() !== "") { itemName = rawName.trim(); } } // ===== 提取定价 ===== var priceView = child.findOne(id(PRICE_ID)); if (!priceView) continue; var priceText = (priceView.text() || "").trim(); var priceMatch = priceText.match(/[\d.]+/); if (!priceMatch) continue; var priceNum = parseFloat(priceMatch[0]); if (isNaN(priceNum)) continue; // ✅ 终止条件:定价 > 100 if (priceNum > 100) { console.log("🛑 触发退出条件:商品【" + itemName + "】定价为 " + priceNum + " > 100,立即停止!"); shouldStopScript = true; break; // 跳出 for 循环 } // 🔑 生成唯一键:名称 + 定价(四舍五入到2位小数) var key = normalizeString(itemName) + "@" + round(priceNum, 2); // ✅ 如果已记录,则跳过 if (recordedKeys[key]) { continue; // 已存在,不重复记录 } // ✅ 新项目,记录并标记 recordedKeys[key] = true; var timestamp = formatDateTime(); results.push({ name: itemName, price: priceNum, stock: depositNum, timestamp: timestamp }); console.log("✅ 记录新商品: " + itemName + ", 在售:" + depositNum + ", 定价:" + priceNum); foundValidItemOnPage = true; } catch (e) { console.warn("处理 itemView 异常:", e.message); } if (shouldStopScript) break; } // end for // 如果触发了终止条件,直接退出整个循环 if (shouldStopScript) { break; } // 滑动加载下一页 swipeUp(); sleep(3000); } // end while // 输出汇总 console.log("\n📊 本次共采集到 " + results.length + " 条不重复的符合条件的数据:"); for (var j = 0; j < results.length; j++) { var r = results[j]; var timePart = r.timestamp.split(' ')[1]; // HH:mm:ss console.log(r.name + " | 定价:" + r.price + " | 在售:" + r.stock + " | " + timePart); } // 保存到 CSV 文件 if (results.length > 0) { saveResultsToCSV(results); } else { console.log("📭 无数据可保存。"); } return results; } // ====== 保存结果到 CSV 文件(若文件不存在则创建)====== function saveResultsToCSV(results) { try { var file = new File(CSV_PATH); var needsHeader = !file.exists() || file.length() === 0; var fw = new java.io.FileWriter(file, true); var bw = new java.io.BufferedWriter(fw); if (needsHeader) { bw.write("任务名称,定价,在售数量,创建时间\n"); } // 追加写入每条数据 try { var stream = fs.createWriteStream(CSV_FILE_PATH, { flags: 'a', encoding: 'utf-8' }); for (var i = 0; i < results.length; i++) { var r = results[i]; var name = r.name; // 处理名称中的逗号:用双引号包裹,并转义已有双引号 if (name.indexOf(',') !== -1 || name.indexOf('"') !== -1) { name = '"' + name.replace(/"/g, '""') + '"'; } var line = name + "," + r.price + "," + r.stock + "," + r.timestamp + "\n"; stream.write(line); } stream.end(); // 关闭流 sleep(500); // 给系统时间完成写入 console.log("💾 成功追加 " + results.length + " 条记录到 CSV 文件:" + CSV_FILE_PATH); } catch (e) { console.error("❌ 写入文件失败: " + e.message); } } // ✅ 执行主函数一次 main(); 修改以上脚本
最新发布
11-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值