← 全部文章

指南

基于时间的规则:专注模式、夜间色调和周末布局

JustZix 里的一条规则按 URL 模式匹配 —— 当地址栏匹配时它就触发,仅此而已。没有「仅工作日」开关,没有日程字段。但也不需要有:规则主体是 JavaScript,而 JavaScript 能读时钟。本指南介绍如何让单独一条规则在工作时段是一种表现、在夜里、周末或下午 6 点后是另一种表现 —— 全靠几行日期逻辑。

为什么时间是一个 JS 端的检查

这是关键的心智模型:规则按 URL 匹配,JavaScript 决定时间。规则的 URL 模式控制脚本在哪里运行;脚本顶部的一次时间检查控制它是否做事。规则仍然在每个匹配的页面上注入 —— 它只是在时钟这么说时提前退出。一旦这一点理解了,下面每个例子都是同一个形状:读 new Date(),比较,然后要么行动要么 return。

读时钟

一切都从 new Date() 开始,它给你浏览器里当前的本地时间。你最需要的两个方法:

const now = new Date();

const hour = now.getHours();      // 0-23, local time
const day  = now.getDay();        // 0 = Sunday ... 6 = Saturday

const isWeekend = day === 0 || day === 6;
const isWorkHours = hour >= 9 && hour < 17;   // 09:00-16:59
const isNight = hour >= 21 || hour < 7;        // 21:00-06:59

注意 getHours() 是用户机器的本地时间,这正是你想要的「我的工作时段」。而夜间检查用 ||,因为这个范围跨过了午夜 —— 一个常见的差一错误陷阱。

守卫模式

每条基于时间的规则都遵循同样的模板:计算一个条件,如果不满足就立即 return。把它包进一个 IIFE,这样提前的 return 是合法的。

(() => {
  const hour = new Date().getHours();

  // Only do something during work hours
  if (!(hour >= 9 && hour < 17)) return;

  // ...the rule's actual effect goes here...
})();

这就是全部的诀窍。脚本总是运行;守卫决定主体是否运行。后面的一切只是改变条件和主体。

配方 1 —— 工作时段的专注模式

用一个 URL 模式把规则限定到那些吃掉你一天的站点 —— 社交媒体、新闻、视频 —— 然后让脚本在工作时段把页面清空,并附一条礼貌的消息。

(() => {
  const hour = new Date().getHours();
  const day = new Date().getDay();
  const working = day >= 1 && day <= 5
    && hour >= 9 && hour < 17;
  if (!working) return;

  document.documentElement.innerHTML =
    '<body style="margin:0;display:flex;height:100vh;'
    + 'align-items:center;justify-content:center;'
    + 'font:600 22px system-ui;background:#0f172a;color:#e2e8f0">'
    + 'Focus mode — this site is off until 17:00</body>';

  // Stop the page doing anything else
  window.stop();
})();

每个让你分心的东西做一条这样的规则,或在一个专用文件夹里用一个宽泛的模式。在朝九晚五之外,守卫失败,站点完全正常 —— 没有永久封锁,没有要禁用的单独应用。

配方 2 —— 暖色夜间色调

深夜浏览用一个暖色、调暗的浮层会更护眼。这一个从 JS 注入 CSS,这样它能是有条件的 —— 一条纯 CSS 规则没法检查小时。

(() => {
  const hour = new Date().getHours();
  if (!(hour >= 21 || hour < 7)) return;

  const tint = document.createElement('div');
  Object.assign(tint.style, {
    position: 'fixed', inset: '0',
    background: 'rgba(255, 147, 41, 0.18)',
    pointerEvents: 'none',
    zIndex: 2147483600,
    mixBlendMode: 'multiply',
  });
  document.documentElement.appendChild(tint);

  // Also dim overall brightness a touch
  document.documentElement.style.filter = 'brightness(0.9)';
})();

这个浮层用 pointer-events: none 所以它永不挡住点击,用 mix-blend-mode: multiply 所以它给颜色加暖,而不只是给它们蒙上雾。用一个宽泛的 URL 模式应用它,得到一个全站的夜间模式。

配方 3 —— 仅周末的布局

也许一个工作仪表盘在周六和周日应该看起来更平静 —— 更宽的外边距、柔和的颜色、没有紧急的红色徽章。把 URL 模式(那个仪表盘)和一个周末检查结合。

(() => {
  const day = new Date().getDay();
  if (day !== 0 && day !== 6) return;   // weekdays: do nothing

  const css = document.createElement('style');
  css.textContent = `
    body { max-width: 900px; margin: 0 auto; }
    .badge-urgent, .alert-red { filter: grayscale(1); }
    .notifications { display: none !important; }
  `;
  document.head.appendChild(css);
})();

在工作日守卫 return,仪表盘是它正常的样子。这是不维护两条规则就能得到一个「周末模式」的最干净方式。

配方 4 —— 下午 6 点后,隐藏工作工具

专注模式的反面:在傍晚,温和地劝阻打开工作应用。把规则限定到你的工作工具,并检查傍晚的时间窗。

(() => {
  const now = new Date();
  const hour = now.getHours();
  const day = now.getDay();

  // After 18:00, or anytime on the weekend
  const offHours = hour >= 18 || day === 0 || day === 6;
  if (!offHours) return;

  const banner = document.createElement('div');
  banner.textContent = 'It is after hours. Sure you need this now?';
  Object.assign(banner.style, {
    position: 'fixed', top: '0', left: '0', right: '0',
    background: '#b45309', color: '#fff',
    font: '600 14px system-ui', textAlign: 'center',
    padding: '10px', zIndex: 2147483600,
  });
  document.body.appendChild(banner);
  document.body.style.filter = 'grayscale(0.4)';
})();

一个柔和的提醒 —— 一个横幅和轻微的去饱和 —— 而不是一个硬封锁。按口味调整;结构和其他几个完全一样。

把时间和 URL 模式结合

这两层自然地组合:

你也可以按分钟来设门控以获得更细的控制(getMinutes()),或按日期做一条「到月底为止」的规则(getDate()getMonth())。

需要记住的事

另见

规则按 URL 匹配,但 JavaScript 掌管时钟 —— 而这就是你做专注模式、夜间色调和周末布局所需要的全部。安装 JustZix,让你的规则报时。

为这篇文章评分

暂无评分 — 成为第一个。

自己动手试试

安装 JustZix,粘贴本文中的任意代码片段。两分钟,从零到一条在你所有设备上生效的规则。

获取 JustZix

功能 · 工作原理 · 示例 · 应用场景