我的知识记录

如何修改网页内置时间(图文)

修改网页内置时间有多种方法,主要取决于具体的需求和场景:

1. 修改浏览器JavaScript Date对象

重写Date构造函数


 
javascript
// 保存原始Date构造函数 const OriginalDate = window.Date; // 创建自定义Date构造函数 window.Date = function Date(...args) { if (args.length === 0) { // 当没有参数时,返回固定时间 return new OriginalDate('2023-01-01T12:00:00Z'); } return new OriginalDate(...args); }; // 保持静态方法 window.Date.now = () => new OriginalDate('2023-01-01T12:00:00Z').getTime(); window.Date.UTC = OriginalDate.UTC; window.Date.parse = OriginalDate.parse;

使用Monkey Patching


 
javascript
// 保存原始方法 const originalNow = Date.now; const originalGetTime = Date.prototype.getTime; // 修改Date.now方法 Date.now = function() { return new Date('2023-01-01T12:00:00Z').getTime(); }; // 修改实例方法 Date.prototype.getTime = function() { if (this instanceof Date && isNaN(this.valueOf())) { return new Date('2023-01-01T12:00:00Z').getTime(); } return originalGetTime.call(this); };

2. 浏览器开发者工具修改

Chrome DevTools

  1. 打开开发者工具(F12)
  2. 进入Console面板
  3. 执行时间修改代码:

 
javascript
// 临时修改当前页面的时间 Date = class extends Date { constructor(...args) { if (args.length === 0) { super('2023-01-01T12:00:00Z'); } else { super(...args); } } static now() { return new Date('2023-01-01T12:00:00Z').getTime(); } };

3. 使用浏览器扩展

开发自定义扩展


 
javascript
// manifest.json { "name": "Time Modifier", "version": "1.0", "content_scripts": [{ "matches": ["<all_urls>"], "js": ["content.js"], "run_at": "document_start" }] } // content.js (function() { const fixedTime = new Date('2023-01-01T12:00:00Z'); const OriginalDate = window.Date; window.Date = function(...args) { if (args.length === 0) { return fixedTime; } return new OriginalDate(...args); }; window.Date.now = () => fixedTime.getTime(); window.Date.UTC = OriginalDate.UTC; window.Date.parse = OriginalDate.parse; })();

4. 修改服务器端时间

PHP示例


 
php
<?php // 设置固定的响应时间头 header('Date: Sun, 01 Jan 2023 12:00:00 GMT'); // 或者在应用中设置时区和时间 date_default_timezone_set('UTC'); // 使用固定时间而不是当前时间 $fixedTime = strtotime('2023-01-01 12:00:00'); echo date('Y-m-d H:i:s', $fixedTime); ?>

Node.js示例


 
javascript
// 创建一个时间模拟中间件 function timeMockMiddleware(req, res, next) { // 修改服务器响应头中的时间 res.setHeader('Date', new Date('2023-01-01T12:00:00Z').toUTCString()); next(); } // 应用中间件 app.use(timeMockMiddleware); // 在路由中使用固定时间 app.get('/api/data', (req, res) => { const fixedTime = new Date('2023-01-01T12:00:00Z'); res.json({ data: 'some data', timestamp: fixedTime.toISOString() }); });

5. 使用代理工具

Charles Proxy

  1. 安装Charles Proxy
  2. 设置断点(Breakpoints)
  3. 修改HTTP响应头中的Date字段
  4. 修改JSON响应中的时间字段

Fiddler


 
csharp
// FiddlerScript自定义规则 static function OnBeforeResponse(oS: Session) { if (oS.url.indexOf("api.example.com") > -1) { // 修改响应头时间 oS.ResponseHeaders["Date"] = "Sun, 01 Jan 2023 12:00:00 GMT"; // 修改JSON响应中的时间字段 if (oS.ResponseBodyAsString.Contains("timestamp")) { var responseBody = oS.GetResponseBodyAsString(); responseBody = responseBody.Replace(/"timestamp":"[^"]*"/g, '"timestamp":"2023-01-01T12:00:00Z"'); oS.utilSetResponseBody(responseBody); } } }

6. 使用时间旅行调试工具

React DevTools时间旅行


 
javascript
// Redux应用中的时间旅行 import { createStore, applyMiddleware } from 'redux'; import { createLogger } from 'redux-logger'; const timeMachineMiddleware = store => next => action => { // 记录动作和状态 console.log('Action:', action); console.log('State before:', store.getState()); // 可以在这里注入固定时间 const result = next(action); console.log('State after:', store.getState()); return result; };

7. 注意事项和限制

安全限制

  • 现代浏览器的安全策略可能限制某些修改
  • HTTPS站点可能阻止某些类型的注入
  • CORS政策可能影响跨域请求的时间处理

兼容性考虑


 
javascript
// 确保兼容性的修改方式 (function() { // 检查是否已经修改过 if (window.__DATE_MODIFIED__) return; window.__DATE_MODIFIED__ = true; const OriginalDate = window.Date; // 更安全的Date对象包装 function ModifiedDate(...args) { if (this instanceof ModifiedDate) { if (args.length === 0) { return new OriginalDate('2023-01-01T12:00:00Z'); } return new OriginalDate(...args); } return OriginalDate.apply(this, args); } // 复制所有静态属性和方法 Object.getOwnPropertyNames(OriginalDate).forEach(prop => { ModifiedDate[prop] = OriginalDate[prop]; }); // 修改静态方法 ModifiedDate.now = () => new OriginalDate('2023-01-01T12:00:00Z').getTime(); window.Date = ModifiedDate; })();

检测和恢复


 
javascript
// 提供恢复原始Date对象的方法 window.restoreOriginalDate = function() { if (window.OriginalDate) { window.Date = window.OriginalDate; } }; // 检测Date对象是否被修改 window.isDateModified = function() { return Date.toString().indexOf('OriginalDate') !== -1; };
选择合适的方法取决于你的具体需求:
  • 测试目的:使用浏览器控制台或开发工具
  • 开发调试:使用代理工具或浏览器扩展
  • 生产环境:修改服务器端代码
  • 自动化测试:使用时间模拟库如Sinon.js

如何修改网页内置时间(图文)

标签:

更新时间:2025-12-15 12:36:07

上一篇:复制文件夹怎么不改变修改日期(图文)

下一篇:上传的文件不能大于100kb(图文)