Action
FlickDate JP(フリック日付入力)
Posted by wreckin crew from JP,
Last update
about 20 hours ago
FlickDate JP: 数字フリックだけで完結する爆速日付入力
Draftsでの日次記録やタスク管理を、もっとスムーズに。
日本語環境の「数字フリック入力」に最大限最適化した、日付入力スクリプトです。
キーボードを切り替えることなく、数字と記号の組み合わせだけで「4月14日(火)」といった日本形式の日付を瞬時に挿入できます。
✨ 主な特徴
数字キーボードで完結: .(ドット)や >(不等号)は数字フリックで入力可能なため、文字入力の切り替えストレスがありません。
当日入力の簡略化: . または 0 を打つだけで今日の日付を指定できます。
直感的な曜日指定: 日曜(0)〜土曜(6)の番号で、次回の曜日や前回の曜日を素早く計算。
連続日程生成: *n 記法により、複数日分の日付を一括で作成できます。
📝 入力記法ガイド
プロンプトが表示されたら、以下の形式で入力してください。
- . または 0 : 当日(今日)
- 3. : 3日後(数値の後にドット)
- .3 : 3日前(数値の前にドット)
- >n : 次の指定曜日(nは0:日〜6:土。例: >0 で次の日曜 / >6 で次の土曜)
- <n : 前の指定曜日(例: <1 で前の月曜)
- 25 : 今月の指定日(例: 25日)
- 4/20 : 指定した月日
- 2026/5/1 または 26/5/1 : 年/月/日の指定
⠀🔥 連続日程の生成(*記法)
日付指定の後に *n を付けると、その日から n日間分の日付をまとめて挿入します。
入力例:
- .*3 : 今日から3日間分の日付
- >1*5 : 次の月曜日から5日間分の日付
出力イメージ(.*3 の場合):
3月18日(水)
3月19日(木)
3月20日(金)
週次レビューの準備や、連休の予定、ルーチンワークの書き出しに非常に便利です。
💡 Tips
記号(> や <)を重ねることで、さらに遠い日程も指定可能です。
例:>>0(再来週の日曜日)
日本での使い勝手を追求したこのアクションが、あなたのDraftsライフをより快適にすることを願っています。
Steps
-
script
// Drafts用 日付入力スクリプト /** * 日付ショートカットの解析 * @param {string} input - 入力文字列 (例: "3.", ">0", "<6", "25", "4/14") */ function parseDateShorthand(input) { const today = new Date(); let targetDate = new Date(today.getFullYear(), today.getMonth(), today.getDate()); if (input === "." || input === "0") { return targetDate; } const afterMatch = /^(\d+)\.$/.exec(input); const beforeMatch = /^\.(\d+)$/.exec(input); const nextDowMatch = /^([>]+)([0-6])$/.exec(input); const prevDowMatch = /^([<]+)([0-6])$/.exec(input); const fullDateMatch = /^(\d{2,4})\/(\d{1,2})\/(\d{1,2})$/.exec(input); const monthDayMatch = /^(\d{1,2})\/(\d{1,2})$/.exec(input); const onlyNumber = /^(\d+)$/.exec(input); if (afterMatch) { targetDate.setDate(targetDate.getDate() + parseInt(afterMatch[1])); } else if (beforeMatch) { targetDate.setDate(targetDate.getDate() - parseInt(beforeMatch[1])); } else if (nextDowMatch) { const extraWeeks = nextDowMatch[1].length - 1; const targetDOW = parseInt(nextDowMatch[2]); const currentDOW = targetDate.getDay(); let daysToAdd = (targetDOW - currentDOW + 7) % 7; if (daysToAdd === 0) daysToAdd = 7; targetDate.setDate(targetDate.getDate() + daysToAdd + (extraWeeks * 7)); } else if (prevDowMatch) { const extraWeeks = prevDowMatch[1].length - 1; const targetDOW = parseInt(prevDowMatch[2]); const currentDOW = targetDate.getDay(); let daysToSub = (currentDOW - targetDOW + 7) % 7; if (daysToSub === 0) daysToSub = 7; targetDate.setDate(targetDate.getDate() - (daysToSub + (extraWeeks * 7))); } else if (fullDateMatch) { let year = parseInt(fullDateMatch[1]); if (year < 100) year += 2000; targetDate = new Date(year, parseInt(fullDateMatch[2]) - 1, parseInt(fullDateMatch[3])); } else if (monthDayMatch) { targetDate = new Date(today.getFullYear(), parseInt(monthDayMatch[1]) - 1, parseInt(monthDayMatch[2])); } else if (onlyNumber) { targetDate.setDate(parseInt(onlyNumber[1])); } else { return null; } return targetDate; } function formatDateJapanese(date) { const days = ["日", "月", "火", "水", "木", "金", "土"]; return `${date.getMonth() + 1}月${date.getDate()}日(${days[date.getDay()]})`; } const p = Prompt.create(); p.title = "日付入力"; p.message = "当日: . または 0\n曜日: >0(次日) / >6(次土) / <0(前日)\n相対日: 3. (後) / .3 (前)\n連続: .*3 (今日から3日間)"; p.addTextField("shorthand", "入力", "", { "keyboard": "numbersAndPunctuation", "wantsFocus": true }); p.addButton("挿入"); if (p.show()) { let input = p.fieldValues["shorthand"].trim(); let baseInput = input; let repeatCount = 1; const repeatMatch = input.match(/^(.*?)\*(\d+)$/); if (repeatMatch) { baseInput = repeatMatch[1]; repeatCount = parseInt(repeatMatch[2], 10); } const resultDate = parseDateShorthand(baseInput); if (resultDate && !isNaN(resultDate.getTime())) { let resultStrings = []; for (let i = 0; i < repeatCount; i++) { let d = new Date(resultDate.getTime()); d.setDate(d.getDate() + i); resultStrings.push(formatDateJapanese(d)); } editor.setSelectedText(resultStrings.join("\n")); } else { app.displayWarningMessage("無効な入力です"); } }
Options
-
After Success Default Notification Error Log Level Info
Items available in the Drafts Directory are uploaded by community members. Use appropriate caution reviewing downloaded items before use.