nadesiko3 3.7.21 → 3.7.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/batch/command.txt +370 -334
- package/batch/jsplugin2text.nako3 +1 -1
- package/batch/pickup_command.nako3 +12 -0
- package/core/command/snako.mts +5 -1
- package/core/deno/snako.ts +5 -1
- package/core/package-lock.json +382 -21
- package/core/package.json +4 -4
- package/core/src/nako3.mts +178 -614
- package/core/src/nako_basic_plugins.mts +39 -0
- package/core/src/nako_core_version.mts +2 -2
- package/core/src/nako_csv.mts +0 -1
- package/core/src/nako_event.mts +49 -0
- package/core/src/nako_gen.mts +291 -202
- package/core/src/nako_indent_inline.mts +2 -2
- package/core/src/nako_lex_rules.mts +1 -1
- package/core/src/nako_parser3.mts +106 -165
- package/core/src/nako_parser_async.mts +97 -0
- package/core/src/nako_parser_base.mts +4 -55
- package/core/src/nako_parser_message.mts +105 -0
- package/core/src/nako_parser_operator.mts +93 -0
- package/core/src/nako_plugin_manager.mts +260 -0
- package/core/src/nako_require.mts +292 -0
- package/core/src/nako_runner.mts +191 -0
- package/core/src/nako_tokenizer.mts +221 -0
- package/core/src/plugin_csv.mts +1 -1
- package/core/src/plugin_system.mts +34 -3259
- package/core/src/plugin_system_array.mts +699 -0
- package/core/src/plugin_system_datetime.mts +368 -0
- package/core/src/plugin_system_debug.mts +403 -0
- package/core/src/plugin_system_dict.mts +85 -0
- package/core/src/plugin_system_json.mts +73 -0
- package/core/src/plugin_system_math.mts +383 -0
- package/core/src/plugin_system_regexp.mts +120 -0
- package/core/src/plugin_system_stdio.mts +86 -0
- package/core/src/plugin_system_string.mts +666 -0
- package/core/src/plugin_system_timer.mts +152 -0
- package/core/src/plugin_system_types.mts +151 -0
- package/core/src/plugin_system_url.mts +193 -0
- package/core/src/plugin_toml.mts +3 -3
- package/core/test/fixtures/README.md +39 -0
- package/core/test/fixtures/make_parser_ast_golden.mjs +31 -0
- package/core/test/fixtures/parser_ast_golden.json +8027 -0
- package/core/test/fixtures/parser_corpus.mjs +120 -0
- package/core/test/indent_test.mjs +6 -0
- package/core/test/nako_basic_plugins_test.mjs +44 -0
- package/core/test/nako_event_test.mjs +85 -0
- package/core/test/nako_gen_perf_test.mjs +178 -0
- package/core/test/nako_parser_async_test.mjs +112 -0
- package/core/test/nako_parser_test.mjs +160 -0
- package/core/test/nako_plugin_manager_test.mjs +185 -0
- package/core/test/nako_require_test.mjs +153 -0
- package/core/test/nako_runner_test.mjs +114 -0
- package/core/test/nako_tokenizer_test.mjs +115 -0
- package/core/test/plugin_system_debug_test.mjs +141 -0
- package/core/test/plugin_system_split_test.mjs +179 -0
- package/core/test/plugin_system_test.mjs +6 -0
- package/core/tsconfig.json +0 -1
- package/package.json +17 -21
- package/release/_hash.txt +36 -36
- package/release/_script-tags.txt +16 -16
- package/release/command.json +1 -1
- package/release/command.json.js +1 -1
- package/release/command_cnako3.json +1 -1
- package/release/command_list.json +1 -1
- package/release/edit_main.js +6 -6
- package/release/edit_main.js.map +3 -3
- package/release/editor.js +6 -6
- package/release/plugin_keigo.js.map +3 -3
- package/release/plugin_markup.js +46 -46
- package/release/plugin_markup.js.map +3 -3
- package/release/plugin_weykturtle3d.js +1 -1
- package/release/plugin_weykturtle3d.js.map +3 -3
- package/release/version.js +2 -2
- package/release/version_main.js +2 -2
- package/release/version_main.js.map +1 -1
- package/release/wnako3.js +186 -213
- package/release/wnako3.js.map +4 -4
- package/release/wnako3webworker.js +172 -199
- package/release/wnako3webworker.js.map +4 -4
- package/src/cnako3mod.mjs +7 -2
- package/src/cnako3mod.mts +7 -2
- package/src/nako_version.mjs +2 -2
- package/src/nako_version.mts +2 -2
- package/src/plugin_browser_ajax.mjs +4 -4
- package/src/plugin_browser_ajax.mts +4 -4
- package/src/plugin_browser_audio.mjs +10 -10
- package/src/plugin_browser_audio.mts +10 -10
- package/src/plugin_browser_camera.mjs +4 -4
- package/src/plugin_browser_camera.mts +4 -4
- package/src/plugin_browser_canvas.mjs +2 -2
- package/src/plugin_browser_canvas.mts +2 -2
- package/src/plugin_browser_crypto.mjs +3 -3
- package/src/plugin_browser_crypto.mts +3 -3
- package/src/plugin_browser_dom_event.mjs +1 -1
- package/src/plugin_browser_dom_event.mts +1 -1
- package/src/plugin_browser_geolocation.mjs +1 -1
- package/src/plugin_browser_geolocation.mts +1 -1
- package/src/plugin_browser_hotkey.mjs +1 -1
- package/src/plugin_browser_hotkey.mts +1 -1
- package/src/plugin_browser_html.mjs +1 -1
- package/src/plugin_browser_html.mts +1 -1
- package/src/plugin_browser_location.mjs +1 -1
- package/src/plugin_browser_location.mts +1 -1
- package/src/plugin_browser_speech.mjs +1 -1
- package/src/plugin_browser_speech.mts +1 -1
- package/src/plugin_browser_storage.mjs +2 -2
- package/src/plugin_browser_storage.mts +2 -2
- package/src/plugin_httpserver.mjs +3 -3
- package/src/plugin_httpserver.mts +3 -3
- package/src/plugin_keigo.mjs +2 -2
- package/src/plugin_keigo.mts +2 -2
- package/src/plugin_node.mjs +48 -48
- package/src/plugin_node.mts +53 -53
- package/src/plugin_weykturtle3d.mjs +56 -56
- package/src/plugin_weykturtle3d.mts +56 -56
- package/src/wnako3.mjs +1 -1
- package/src/wnako3.mts +1 -1
- package/src/wnako3_editor.mjs +5 -5
- package/src/wnako3_editor.mts +5 -5
- package/src/wnako3mod.mjs +2 -2
- package/src/wnako3mod.mts +2 -2
- package/core/src/nako3.mjs +0 -1021
- package/core/src/nako_ast.mjs +0 -4
- package/core/src/nako_colors.mjs +0 -77
- package/core/src/nako_core_version.mjs +0 -8
- package/core/src/nako_csv.mjs +0 -193
- package/core/src/nako_errors.mjs +0 -166
- package/core/src/nako_from_dncl.mjs +0 -285
- package/core/src/nako_from_dncl2.mjs +0 -347
- package/core/src/nako_gen.mjs +0 -2500
- package/core/src/nako_global.mjs +0 -138
- package/core/src/nako_indent.mjs +0 -442
- package/core/src/nako_indent_chars.mjs +0 -29
- package/core/src/nako_indent_inline.mjs +0 -361
- package/core/src/nako_josi_list.mjs +0 -47
- package/core/src/nako_lex_rules.mjs +0 -319
- package/core/src/nako_lexer.mjs +0 -794
- package/core/src/nako_logger.mjs +0 -221
- package/core/src/nako_parser3.mjs +0 -3250
- package/core/src/nako_parser_base.mjs +0 -403
- package/core/src/nako_parser_const.mjs +0 -37
- package/core/src/nako_prepare.mjs +0 -329
- package/core/src/nako_reserved_words.mjs +0 -42
- package/core/src/nako_source_mapping.mjs +0 -207
- package/core/src/nako_test.mjs +0 -37
- package/core/src/nako_token.mjs +0 -1
- package/core/src/nako_tools.mjs +0 -53
- package/core/src/nako_types.mjs +0 -14
- package/core/src/plugin_api.mjs +0 -4
- package/core/src/plugin_csv.mjs +0 -97
- package/core/src/plugin_math.mjs +0 -352
- package/core/src/plugin_promise.mjs +0 -102
- package/core/src/plugin_system.mjs +0 -3810
- package/core/src/plugin_test.mjs +0 -52
- package/core/src/plugin_toml.mjs +0 -39
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileOverview なでしこ3 plugin_system の分割ファイル
|
|
3
|
+
*
|
|
4
|
+
* 日時処理(簡易)の命令を定義する。
|
|
5
|
+
* このファイルは単独のプラグインではなく、plugin_system.mts へマージされる。(#2351)
|
|
6
|
+
*/
|
|
7
|
+
import { NakoSystem } from './plugin_api.mjs'
|
|
8
|
+
|
|
9
|
+
export default {
|
|
10
|
+
// @日時処理(簡易)
|
|
11
|
+
'元号データ': { type: 'const', value: [{ '元号': '令和', '改元日': '2019/05/01' }, { '元号': '平成', '改元日': '1989/01/08' }, { '元号': '昭和', '改元日': '1926/12/25' }, { '元号': '大正', '改元日': '1912/07/30' }, { '元号': '明治', '改元日': '1868/10/23' }] }, // @げんごうでーた
|
|
12
|
+
'今': { // @現在時刻を「HH:mm:ss」の形式で返す // @いま
|
|
13
|
+
type: 'func',
|
|
14
|
+
josi: [],
|
|
15
|
+
pure: true,
|
|
16
|
+
fn: function() {
|
|
17
|
+
const z2 = (n: number): string => {
|
|
18
|
+
const ns = '00' + String(n)
|
|
19
|
+
return ns.substring(ns.length - 2, ns.length)
|
|
20
|
+
}
|
|
21
|
+
const t = new Date()
|
|
22
|
+
return z2(t.getHours()) + ':' + z2(t.getMinutes()) + ':' + z2(t.getSeconds())
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
'システム時間': { // @現在のUNIX時間 (UTC(1970/1/1)からの経過秒数) を返す // @しすてむじかん
|
|
26
|
+
type: 'func',
|
|
27
|
+
josi: [],
|
|
28
|
+
pure: true,
|
|
29
|
+
fn: function() {
|
|
30
|
+
const now = new Date()
|
|
31
|
+
return Math.floor(now.getTime() / 1000)
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
'システム時間ミリ秒': { // @現在のUNIX時間 (UTC(1970/1/1)からの経過秒数) をミリ秒で返す // @しすてむじかんみりびょう
|
|
35
|
+
type: 'func',
|
|
36
|
+
josi: [],
|
|
37
|
+
pure: true,
|
|
38
|
+
fn: function() {
|
|
39
|
+
const now = new Date()
|
|
40
|
+
return now.getTime()
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
'今日': { // @今日の日付を「YYYY/MM/DD」の形式で返す // @きょう
|
|
44
|
+
type: 'func',
|
|
45
|
+
josi: [],
|
|
46
|
+
pure: true,
|
|
47
|
+
fn: function(sys: NakoSystem) {
|
|
48
|
+
return sys.__formatDate(new Date())
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
'明日': { // @明日の日付を「YYYY/MM/DD」の形式で返す // @あした
|
|
52
|
+
type: 'func',
|
|
53
|
+
josi: [],
|
|
54
|
+
pure: true,
|
|
55
|
+
fn: function(sys: NakoSystem) {
|
|
56
|
+
const t = Date.now() + (24 * 60 * 60 * 1000)
|
|
57
|
+
return sys.__formatDate(new Date(t))
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
'昨日': { // @昨日の日付を「YYYY/MM/DD」の形式で返す // @きのう
|
|
61
|
+
type: 'func',
|
|
62
|
+
josi: [],
|
|
63
|
+
pure: true,
|
|
64
|
+
fn: function(sys: NakoSystem) {
|
|
65
|
+
const t = Date.now() - (24 * 60 * 60 * 1000)
|
|
66
|
+
return sys.__formatDate(new Date(t))
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
'今年': { // @今年が何年かを西暦で返す // @ことし
|
|
70
|
+
type: 'func',
|
|
71
|
+
josi: [],
|
|
72
|
+
pure: true,
|
|
73
|
+
fn: function() {
|
|
74
|
+
return (new Date()).getFullYear()
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
'来年': { // @来年が何年かを西暦で返す // @らいねん
|
|
78
|
+
type: 'func',
|
|
79
|
+
josi: [],
|
|
80
|
+
pure: true,
|
|
81
|
+
fn: function() {
|
|
82
|
+
return (new Date()).getFullYear() + 1
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
'去年': { // @去年が何年かを西暦で返す // @きょねん
|
|
86
|
+
type: 'func',
|
|
87
|
+
josi: [],
|
|
88
|
+
pure: true,
|
|
89
|
+
fn: function() {
|
|
90
|
+
return (new Date()).getFullYear() - 1
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
'今月': { // @今月が何月かを返す // @こんげつ
|
|
94
|
+
type: 'func',
|
|
95
|
+
josi: [],
|
|
96
|
+
pure: true,
|
|
97
|
+
fn: function() {
|
|
98
|
+
return (new Date()).getMonth() + 1
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
'来月': { // @来月が何月かを返す // @らいげつ
|
|
102
|
+
type: 'func',
|
|
103
|
+
josi: [],
|
|
104
|
+
pure: true,
|
|
105
|
+
fn: function() {
|
|
106
|
+
return (new Date()).getMonth() + 2
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
'先月': { // @先月が何月かを返す // @せんげつ
|
|
110
|
+
type: 'func',
|
|
111
|
+
josi: [],
|
|
112
|
+
pure: true,
|
|
113
|
+
fn: function() {
|
|
114
|
+
return (new Date()).getMonth()
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
'曜日': { // @Sに指定した日付の曜日を返す。不正な日付の場合は今日の曜日を返す。 // @ようび
|
|
118
|
+
type: 'func',
|
|
119
|
+
josi: [['の']],
|
|
120
|
+
pure: true,
|
|
121
|
+
fn: function(s: string, sys: any) {
|
|
122
|
+
const d = sys.__str2date(s)
|
|
123
|
+
return '日月火水木金土'.charAt(d.getDay() % 7)
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
'曜日番号取得': { // @Sに指定した日付の曜日番号を番号で返す。不正な日付の場合は今日の曜日番号を返す。(0=日/1=月/2=火/3=水/4=木/5=金/6=土) // @ようびばんごうしゅとく
|
|
127
|
+
type: 'func',
|
|
128
|
+
josi: [['の']],
|
|
129
|
+
pure: true,
|
|
130
|
+
fn: function(s: any) {
|
|
131
|
+
const a = s.split('/')
|
|
132
|
+
const t = new Date(a[0], a[1] - 1, a[2])
|
|
133
|
+
return t.getDay()
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
'UNIXTIME変換': { // @日時SをUNIX時間 (UTC(1970/1/1)からの経過秒数) に変換して返す(v1非互換) // @UNIXTIMEへんかん
|
|
137
|
+
type: 'func',
|
|
138
|
+
josi: [['の', 'を', 'から']],
|
|
139
|
+
pure: true,
|
|
140
|
+
fn: function(s: string, sys: any) {
|
|
141
|
+
const d = sys.__str2date(s)
|
|
142
|
+
return d.getTime() / 1000
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
'UNIX時間変換': { // @日時SをUNIX時間 (UTC(1970/1/1)からの経過秒数) に変換して返す(v1非互換) // @UNIXじかんへんかん
|
|
146
|
+
type: 'func',
|
|
147
|
+
josi: [['の', 'を', 'から']],
|
|
148
|
+
pure: true,
|
|
149
|
+
fn: function(s: string, sys: any) {
|
|
150
|
+
const d = sys.__str2date(s)
|
|
151
|
+
return d.getTime() / 1000
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
'日時変換': { // @UNIX時間 (UTC(1970/1/1)からの経過秒数) を「YYYY/MM/DD HH:mm:ss」の形式に変換 // @にちじへんかん
|
|
155
|
+
type: 'func',
|
|
156
|
+
josi: [['を', 'から']],
|
|
157
|
+
pure: true,
|
|
158
|
+
fn: function(tm: any, sys: any) {
|
|
159
|
+
const t = tm * 1000
|
|
160
|
+
return sys.__formatDateTime(new Date(t), '2022/01/01 00:00:00')
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
'日時書式変換': { // @UNIX時間TM(または日付文字列)を「YYYY/MM/DD HH:mm:ss」または「YY-M-D H:m:s」その他、W:曜日、WWW:曜日英、MMM:月英、ccc:ミリ秒の書式に変換 // @にちじしょしきへんかん
|
|
164
|
+
type: 'func',
|
|
165
|
+
josi: [['を'], ['で']],
|
|
166
|
+
pure: true,
|
|
167
|
+
fn: function(tm: any, fmt: any, sys: any) {
|
|
168
|
+
const t = sys.__str2date(tm)
|
|
169
|
+
fmt = fmt.replace(/(YYYY|ccc|WWW|MMM|YY|MM|DD|HH|mm|ss|[MDHmsW])/g, (m: string) => {
|
|
170
|
+
switch (m) {
|
|
171
|
+
case 'YYYY': return t.getFullYear()
|
|
172
|
+
case 'YY': return (String(t.getFullYear())).substring(2)
|
|
173
|
+
case 'MM': return sys.__zero2(String(t.getMonth() as number + 1))
|
|
174
|
+
case 'DD': return sys.__zero2(t.getDate())
|
|
175
|
+
case 'M': return (t.getMonth() as number + 1)
|
|
176
|
+
case 'D': return (t.getDate())
|
|
177
|
+
case 'HH': return sys.__zero2(t.getHours())
|
|
178
|
+
case 'mm': return sys.__zero2(t.getMinutes())
|
|
179
|
+
case 'ss': return sys.__zero2(t.getSeconds())
|
|
180
|
+
case 'ccc': return sys.__zero(t.getMilliseconds(), 3)
|
|
181
|
+
case 'H': return (t.getHours())
|
|
182
|
+
case 'm': return (t.getMinutes())
|
|
183
|
+
case 's': return (t.getSeconds())
|
|
184
|
+
case 'W': return '日月火水木金土'.charAt(t.getDay() % 7)
|
|
185
|
+
case 'WWW': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][t.getDay() % 7]
|
|
186
|
+
case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][t.getMonth()]
|
|
187
|
+
}
|
|
188
|
+
return m
|
|
189
|
+
})
|
|
190
|
+
return fmt
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
'和暦変換': { // @Sを和暦に変換する。Sは明治以降の日付が有効。 // @われきへんかん
|
|
194
|
+
type: 'func',
|
|
195
|
+
josi: [['を']],
|
|
196
|
+
pure: true,
|
|
197
|
+
fn: function(s: string, sys: NakoSystem) {
|
|
198
|
+
const d = sys.__str2date(s)
|
|
199
|
+
const t = d.getTime()
|
|
200
|
+
for (const era of sys.__getSysVar('元号データ')) {
|
|
201
|
+
const gengo = String(era['元号'])
|
|
202
|
+
const d2 = sys.__str2date(era['改元日'])
|
|
203
|
+
const t2 = d2.getTime()
|
|
204
|
+
if (t2 <= t) {
|
|
205
|
+
let y: any = (d.getFullYear() - d2.getFullYear()) + 1
|
|
206
|
+
if (y === 1) { y = '元' }
|
|
207
|
+
return gengo + String(y) + '年' + sys.__zero2(d.getMonth() + 1) + '月' + sys.__zero2(d.getDate()) + '日'
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
throw new Error('『和暦変換』は明示以前の日付には対応していません。')
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
'年数差': { // @日付AとBの差を年数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @ねんすうさ
|
|
214
|
+
type: 'func',
|
|
215
|
+
josi: [['と', 'から'], ['の', 'までの']],
|
|
216
|
+
pure: true,
|
|
217
|
+
fn: function(a: any, b: any, sys: any) {
|
|
218
|
+
const t1 = sys.__str2date(a)
|
|
219
|
+
const t2 = sys.__str2date(b)
|
|
220
|
+
return (t2.getFullYear() - t1.getFullYear())
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
'月数差': { // @日付AとBの差を月数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @げっすうさ
|
|
224
|
+
type: 'func',
|
|
225
|
+
josi: [['と', 'から'], ['の', 'までの']],
|
|
226
|
+
pure: true,
|
|
227
|
+
fn: function(a: any, b: any, sys: any) {
|
|
228
|
+
const t1 = sys.__str2date(a)
|
|
229
|
+
const t2 = sys.__str2date(b)
|
|
230
|
+
return (t2.getFullYear() * 12 + Number(t2.getMonth())) -
|
|
231
|
+
(t1.getFullYear() * 12 + Number(t1.getMonth()))
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
'日数差': { // @日付AとBの差を日数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @にっすうさ
|
|
235
|
+
type: 'func',
|
|
236
|
+
josi: [['と', 'から'], ['の', 'までの']],
|
|
237
|
+
pure: true,
|
|
238
|
+
fn: function(a: any, b: any, sys: any) {
|
|
239
|
+
const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000)
|
|
240
|
+
const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000)
|
|
241
|
+
const days = Math.ceil((t2 - t1) / (60 * 60 * 24))
|
|
242
|
+
return days
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
'時間差': { // @時間AとBの時間の差を求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @じかんさ
|
|
246
|
+
type: 'func',
|
|
247
|
+
josi: [['と', 'から'], ['の', 'までの']],
|
|
248
|
+
pure: true,
|
|
249
|
+
fn: function(a: any, b: any, sys: any) {
|
|
250
|
+
const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000)
|
|
251
|
+
const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000)
|
|
252
|
+
const hours = Math.ceil((t2 - t1) / (60 * 60))
|
|
253
|
+
return hours
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
'分差': { // @時間AとBの分数の差を求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @ふんさ
|
|
257
|
+
type: 'func',
|
|
258
|
+
josi: [['と', 'から'], ['の', 'までの']],
|
|
259
|
+
pure: true,
|
|
260
|
+
fn: function(a: any, b: any, sys: any) {
|
|
261
|
+
const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000)
|
|
262
|
+
const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000)
|
|
263
|
+
const min = Math.ceil((t2 - t1) / (60))
|
|
264
|
+
return min
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
'秒差': { // @時間AとBの差を秒差で求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @びょうさ
|
|
268
|
+
type: 'func',
|
|
269
|
+
josi: [['と', 'から'], ['の', 'までの']],
|
|
270
|
+
pure: true,
|
|
271
|
+
fn: function(a: any, b: any, sys: any) {
|
|
272
|
+
const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000)
|
|
273
|
+
const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000)
|
|
274
|
+
const sec = Math.ceil((t2 - t1))
|
|
275
|
+
return sec
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
'日時差': { // @日時AとBの差を種類unitで返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @にちじさ
|
|
279
|
+
type: 'func',
|
|
280
|
+
josi: [['と', 'から'], ['の', 'までの'], ['による']],
|
|
281
|
+
pure: true,
|
|
282
|
+
fn: function(a: any, b: any, unit: string, sys: any): string {
|
|
283
|
+
switch (unit) {
|
|
284
|
+
case '年': return sys.__exec('年数差', [a, b, sys])
|
|
285
|
+
case '月': return sys.__exec('月数差', [a, b, sys])
|
|
286
|
+
case '日': return sys.__exec('日数差', [a, b, sys])
|
|
287
|
+
case '時間': return sys.__exec('時間差', [a, b, sys])
|
|
288
|
+
case '分': return sys.__exec('分差', [a, b, sys])
|
|
289
|
+
case '秒': return sys.__exec('秒差', [a, b, sys])
|
|
290
|
+
}
|
|
291
|
+
throw new Error('『日時差』で不明な単位です。')
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
'時間加算': { // @時間SにAを加えて返す。Aには「(+|-)hh:nn:dd」で指定する。 // @じかんかさん
|
|
295
|
+
type: 'func',
|
|
296
|
+
josi: [['に'], ['を']],
|
|
297
|
+
pure: true,
|
|
298
|
+
fn: function(s: string, a: string, sys: any) {
|
|
299
|
+
const op = a.charAt(0)
|
|
300
|
+
if (op === '-' || op === '+') {
|
|
301
|
+
a = a.substring(1)
|
|
302
|
+
}
|
|
303
|
+
const d = sys.__str2date(s)
|
|
304
|
+
const aa = (a + ':0:0').split(':')
|
|
305
|
+
let sec = parseInt(aa[0]) * 60 * 60 +
|
|
306
|
+
parseInt(aa[1]) * 60 +
|
|
307
|
+
parseInt(aa[2])
|
|
308
|
+
if (op === '-') { sec *= -1 }
|
|
309
|
+
const rd = new Date(Number(d.getTime()) + (sec * 1000))
|
|
310
|
+
return sys.__formatDateTime(rd, s)
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
'日付加算': { // @日付SにAを加えて返す。Aには「(+|-)yyyy/mm/dd」で指定する。 // @ひづけかさん
|
|
314
|
+
type: 'func',
|
|
315
|
+
josi: [['に'], ['を']],
|
|
316
|
+
pure: true,
|
|
317
|
+
fn: function(s: string, a: string, sys: any) {
|
|
318
|
+
let op = 1
|
|
319
|
+
const opc = a.charAt(0)
|
|
320
|
+
if (opc === '-' || opc === '+') {
|
|
321
|
+
a = a.substring(1)
|
|
322
|
+
if (opc === '-') { op *= -1 }
|
|
323
|
+
}
|
|
324
|
+
const d = sys.__str2date(s)
|
|
325
|
+
const aa = (a + '/0/0').split('/')
|
|
326
|
+
const addY = parseInt(aa[0]) * op
|
|
327
|
+
const addM = parseInt(aa[1]) * op
|
|
328
|
+
const addD = parseInt(aa[2]) * op
|
|
329
|
+
d.setFullYear(Number(d.getFullYear()) + addY)
|
|
330
|
+
d.setMonth(Number(d.getMonth()) + addM)
|
|
331
|
+
d.setDate(Number(d.getDate()) + addD)
|
|
332
|
+
return sys.__formatDateTime(d, s)
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
'日時加算': { // @日時SにAを加えて返す。Aは「(+|-)1(年|ヶ月|日|週|時間|分|秒)」のように指定する (v1非互換)。 // @にちじかさん
|
|
336
|
+
type: 'func',
|
|
337
|
+
josi: [['に'], ['を']],
|
|
338
|
+
pure: true,
|
|
339
|
+
fn: function(s: string, a: string, sys: any) {
|
|
340
|
+
const r = ('' + a).match(/([+|-]?)(\d+)(年|ヶ月|日|週間|時間|分|秒)$/)
|
|
341
|
+
if (!r) { throw new Error('『日付加算』は『(+|-)1(年|ヶ月|日|時間|分|秒)』の書式で指定します。') }
|
|
342
|
+
switch (r[3]) {
|
|
343
|
+
case '年': return sys.__exec('日付加算', [s, `${r[1]}${r[2]}/0/0`, sys])
|
|
344
|
+
case 'ヶ月': return sys.__exec('日付加算', [s, `${r[1]}0/${r[2]}/0`, sys])
|
|
345
|
+
case '週間': return sys.__exec('日付加算', [s, `${r[1]}0/0/${parseInt(r[2]) * 7}`, sys])
|
|
346
|
+
case '日': return sys.__exec('日付加算', [s, `${r[1]}0/0/${r[2]}`, sys])
|
|
347
|
+
case '時間': return sys.__exec('時間加算', [s, `${r[1]}${r[2]}:0:0`, sys])
|
|
348
|
+
case '分': return sys.__exec('時間加算', [s, `${r[1]}0:${r[2]}:0`, sys])
|
|
349
|
+
case '秒': return sys.__exec('時間加算', [s, `${r[1]}0:0:${r[2]}`, sys])
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
'時間ミリ秒取得': { // @ミリ秒単位の時間を数値で返す。結果は実装に依存する。 // @じかんみりびょうしゅとく
|
|
354
|
+
type: 'func',
|
|
355
|
+
josi: [],
|
|
356
|
+
pure: true,
|
|
357
|
+
fn: function() {
|
|
358
|
+
if (typeof performance !== 'undefined' && performance.now) {
|
|
359
|
+
return performance.now()
|
|
360
|
+
} else if (Date.now) {
|
|
361
|
+
return Date.now()
|
|
362
|
+
} else {
|
|
363
|
+
const now = new Date()
|
|
364
|
+
return now.getTime()
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
},
|
|
368
|
+
}
|