app.date - 日期时间 API

日期时间格式化和计算。

获取当前时间

app.date.now()

获取当前 Unix 时间戳(秒)。

返回值: number - Unix 时间戳

local ts = app.date.now()  -- 1701234567.123

app.date.nowMs()

获取当前 Unix 时间戳(毫秒)。

返回值: number - 毫秒时间戳

local ms = app.date.nowMs()  -- 1701234567123

app.date.today()

获取今天的日期字符串。

返回值: string - YYYY-MM-DD 格式

local today = app.date.today()  -- "2024-12-01"

app.date.time()

获取当前时间字符串。

返回值: string - HH:mm:ss 格式

local time = app.date.time()  -- "14:30:00"

格式化

app.date.format(timestamp?, pattern?)

格式化时间戳。

参数:

  • timestamp (number, 可选) - Unix 时间戳(默认当前时间)
  • pattern (string, 可选) - 格式字符串(默认 “yyyy-MM-dd HH:mm:ss”)

返回值: string - 格式化的日期时间

app.date.format()                          -- "2024-12-01 14:30:00"
app.date.format(nil, "yyyy年MM月dd日")      -- "2024年12月01日"
app.date.format(1701234567)                -- "2023-11-29 10:49:27"
app.date.format(1701234567, "HH:mm")       -- "10:49"

app.date.parse(dateString, pattern?)

解析日期字符串为时间戳。

参数:

  • dateString (string) - 日期字符串
  • pattern (string, 可选) - 格式字符串(默认 “yyyy-MM-dd HH:mm:ss”)

返回值: number|nil - Unix 时间戳或 nil

app.date.parse("2024-12-01 14:30:00")                    -- 1701434200
app.date.parse("2024/12/01", "yyyy/MM/dd")

app.date.iso(timestamp?)

返回 ISO 8601 格式的日期时间。

参数:

  • timestamp (number, 可选) - Unix 时间戳(默认当前时间)

返回值: string - ISO 8601 格式

app.date.iso()  -- "2024-12-01T14:30:00Z"

日期组件

app.date.year(timestamp?)

获取年份。

参数:

  • timestamp (number, 可选) - Unix 时间戳(默认当前时间)

返回值: number - 年份

app.date.year()  -- 2024

app.date.month(timestamp?)

获取月份(1-12)。

app.date.month()  -- 12

app.date.day(timestamp?)

获取日期(1-31)。

app.date.day()  -- 1

app.date.hour(timestamp?)

获取小时(0-23)。

app.date.hour()  -- 14

app.date.minute(timestamp?)

获取分钟(0-59)。

app.date.minute()  -- 30

app.date.second(timestamp?)

获取秒(0-59)。

app.date.second()  -- 0

app.date.weekday(timestamp?)

获取星期(1=周日, 7=周六)。

app.date.weekday()  -- 1 (周日)

app.date.dayOfYear(timestamp?)

获取年中第几天(1-366)。

app.date.dayOfYear()  -- 336

日期计算

app.date.add(timestamp, value, unit)

向日期添加时间。

参数:

  • timestamp (number) - 基准时间戳
  • value (integer) - 数量(可为负数,必须为整数)
  • unit (string) - 单位:year/years, month/months, week/weeks, day/days, hour/hours, minute/minutes, second/seconds

返回值: number|nil - 新时间戳

local now = app.date.now()
app.date.add(now, 1, "days")     -- 明天
app.date.add(now, -7, "days")    -- 7 天前
app.date.add(now, 2, "months")   -- 2 个月后

app.date.diff(timestamp1, timestamp2, unit?)

计算两个时间的差值。

参数:

  • timestamp1 (number) - 第一个时间戳
  • timestamp2 (number) - 第二个时间戳
  • unit (string, 可选) - 单位(默认 “seconds”)

返回值: number - 差值

local diff = app.date.diff(ts1, ts2, "days")
-- 返回相差天数

app.date.startOf(timestamp, unit)

获取时间单位的起点。

参数:

  • timestamp (number) - 时间戳
  • unit (string) - 单位:year, month, week, day, hour, minute

返回值: number|nil - 起点时间戳

local startOfDay = app.date.startOf(app.date.now(), "day")     -- 今天 0:00
local startOfMonth = app.date.startOf(app.date.now(), "month") -- 本月 1 日

app.date.endOf(timestamp, unit)

获取时间单位的终点。

参数:

  • timestamp (number) - 时间戳
  • unit (string) - 单位:year, month, week, day, hour, minute

返回值: number|nil - 终点时间戳

local endOfDay = app.date.endOf(app.date.now(), "day")  -- 今天 23:59:59

判断

app.date.isBefore(timestamp1, timestamp2)

判断 timestamp1 是否在 timestamp2 之前。

返回值: boolean

app.date.isBefore(ts1, ts2)  -- true/false

app.date.isAfter(timestamp1, timestamp2)

判断 timestamp1 是否在 timestamp2 之后。

返回值: boolean

app.date.isAfter(ts1, ts2)  -- true/false

app.date.isSame(timestamp1, timestamp2, unit?)

判断两个时间是否在同一单位内。

参数:

  • timestamp1 (number)
  • timestamp2 (number)
  • unit (string, 可选) - 单位(默认 “day”)

返回值: boolean

app.date.isSame(ts1, ts2, "month")  -- 是否同一个月

app.date.isToday(timestamp)

判断是否为今天。

app.date.isToday(app.date.now())  -- true

app.date.isWeekend(timestamp)

判断是否为周末。

app.date.isWeekend(app.date.now())  -- true/false

app.date.isLeapYear(year)

判断是否为闰年。

app.date.isLeapYear(2024)  -- true

示例

按日期整理文件

function MyPlugin:handleOrganizeByDate(context)
    for _, file in ipairs(context.selectedFiles) do
        local modTime = app.file.modificationDate(file)
        if modTime then
            local dateStr = app.date.format(modTime, "yyyy-MM")
            local destDir = app.path.join(context.currentDirectory, dateStr)

            if not app.path.exists(destDir) then
                app.file.mkdir(destDir)
            end

            local destPath = app.path.join(destDir, app.path.basename(file))
            app.file.move(file, destPath)
        end
    end

    app.notification.show("完成", "文件已按日期整理")
end

添加日期戳

function MyPlugin:handleAddDateStamp(context)
    local dateStr = app.date.format(nil, "yyyyMMdd")

    for _, file in ipairs(context.selectedFiles) do
        local dir = app.path.dirname(file)
        local name = app.path.name(file)
        local ext = app.path.extension(file)
        local newName = name .. "_" .. dateStr

        if ext ~= "" then
            newName = newName .. "." .. ext
        end

        local newPath = app.path.join(dir, newName)
        app.file.move(file, newPath)
    end
end
开发者文档
使用帮助
使用说明 脚本菜单 常见问题
脚本开发
开发指南
插件开发
快速开始 开发指南 示例插件
API 参考
概览 API 查询 插件信息 日志 Finder 上下文 插件设置 国际化
UI 与交互
对话框 进度条 系统通知 选择器 WebView 状态栏 Dock
文件与路径
文件操作 路径工具 Finder 操作 废纸篓 扩展属性 元数据 文件监听
数据格式
JSON Plist CSV XML PDF 图片
文本与编码
字符串 正则表达式 日期时间 颜色 加密编码
系统
Shell 命令 进程管理 应用管理 系统信息 AppleScript 快捷指令
系统信息
网络信息 电源/电池 屏幕/外观 音频控制 蓝牙设备 位置服务
网络
HTTP 请求 WebSocket URL 工具
输入与剪贴板
键盘模拟 鼠标模拟 全局热键 剪贴板 窗口管理
存储
SQLite Keychain UserDefaults
媒体
文字识别 二维码
工具
归档 类型标识 分享 定时器 防休眠 并发/协程