nadesiko3 3.3.49 → 3.3.52

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.
Files changed (343) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +143 -143
  3. package/batch/.DS_Store +0 -0
  4. package/batch/browsers.template.md +3 -3
  5. package/batch/build_browsers.nako3 +72 -72
  6. package/batch/build_command.nako3 +44 -44
  7. package/batch/build_nako_version.nako3 +42 -42
  8. package/batch/calc_hash.nako3 +29 -29
  9. package/batch/cmd_txt2json.nako3 +74 -74
  10. package/batch/command.txt +162 -83
  11. package/batch/command_nakopad.txt +69 -0
  12. package/batch/download-extlib.nako3 +43 -43
  13. package/batch/gen_command_nakopad.nako3 +57 -57
  14. package/batch/jsplugin2text.nako3 +285 -285
  15. package/batch/pickup_command.nako3 +113 -110
  16. package/batch/pickup_reserved_words.nako3 +11 -11
  17. package/batch/publish_version.nako3 +46 -46
  18. package/batch/show_agents.js +14 -14
  19. package/batch/turtle2js.nako3 +21 -21
  20. package/bin/cnako3 +10 -10
  21. package/core/LICENSE +21 -21
  22. package/core/README.md +66 -66
  23. package/core/batch/build_nako_version.nako3 +42 -42
  24. package/core/command/snako.mjs +105 -105
  25. package/core/command/snako.mts +116 -116
  26. package/core/index.mjs +21 -21
  27. package/core/package.json +47 -47
  28. package/core/sample/hello.nako3 +7 -7
  29. package/core/sample/hoge.mjs +4 -4
  30. package/core/sample/hoge.mts +6 -6
  31. package/core/src/nako3.mjs +870 -858
  32. package/core/src/nako3.mts +983 -967
  33. package/core/src/nako_colors.mjs +78 -78
  34. package/core/src/nako_colors.mts +86 -86
  35. package/core/src/nako_core_version.mjs +8 -8
  36. package/core/src/nako_core_version.mts +19 -19
  37. package/core/src/nako_csv.mjs +185 -185
  38. package/core/src/nako_csv.mts +188 -188
  39. package/core/src/nako_errors.mjs +173 -173
  40. package/core/src/nako_errors.mts +197 -197
  41. package/core/src/nako_from_dncl.mjs +255 -255
  42. package/core/src/nako_from_dncl.mts +250 -250
  43. package/core/src/nako_gen.mjs +1647 -1648
  44. package/core/src/nako_gen.mts +1718 -1719
  45. package/core/src/nako_gen_async.mjs +1659 -1659
  46. package/core/src/nako_gen_async.mts +1732 -1732
  47. package/core/src/nako_global.mjs +109 -107
  48. package/core/src/nako_global.mts +141 -138
  49. package/core/src/nako_indent.mjs +445 -445
  50. package/core/src/nako_indent.mts +492 -492
  51. package/core/src/nako_josi_list.mjs +38 -38
  52. package/core/src/nako_josi_list.mts +45 -45
  53. package/core/src/nako_lex_rules.mjs +253 -253
  54. package/core/src/nako_lex_rules.mts +260 -260
  55. package/core/src/nako_lexer.mjs +609 -609
  56. package/core/src/nako_lexer.mts +612 -612
  57. package/core/src/nako_logger.mjs +199 -199
  58. package/core/src/nako_logger.mts +232 -232
  59. package/core/src/nako_parser3.mjs +2441 -2439
  60. package/core/src/nako_parser3.mts +2197 -2195
  61. package/core/src/nako_parser_base.mjs +371 -370
  62. package/core/src/nako_parser_base.mts +372 -370
  63. package/core/src/nako_parser_const.mjs +37 -37
  64. package/core/src/nako_parser_const.mts +37 -37
  65. package/core/src/nako_prepare.mjs +304 -304
  66. package/core/src/nako_prepare.mts +315 -315
  67. package/core/src/nako_reserved_words.mjs +38 -38
  68. package/core/src/nako_reserved_words.mts +38 -38
  69. package/core/src/nako_source_mapping.mjs +207 -207
  70. package/core/src/nako_source_mapping.mts +262 -262
  71. package/core/src/nako_test.mjs +37 -37
  72. package/core/src/nako_types.mjs +13 -25
  73. package/core/src/nako_types.mts +144 -151
  74. package/core/src/plugin_csv.mjs +49 -49
  75. package/core/src/plugin_csv.mts +50 -50
  76. package/core/src/plugin_math.mjs +328 -328
  77. package/core/src/plugin_math.mts +326 -326
  78. package/core/src/plugin_promise.mjs +91 -91
  79. package/core/src/plugin_promise.mts +91 -91
  80. package/core/src/plugin_system.mjs +2832 -2832
  81. package/core/src/plugin_system.mts +2690 -2690
  82. package/core/src/plugin_test.mjs +34 -34
  83. package/core/src/plugin_test.mts +34 -34
  84. package/demo/.DS_Store +0 -0
  85. package/demo/ace_editor.html +89 -89
  86. package/demo/ace_editor_tabs.html +161 -161
  87. package/demo/basic.html +71 -71
  88. package/demo/browsers.html +10 -9
  89. package/demo/css/basic.css +3 -3
  90. package/demo/css/common.css +157 -157
  91. package/demo/css/editor.css +8 -8
  92. package/demo/css/flow.css +3 -3
  93. package/demo/css/index.css +3 -3
  94. package/demo/extlib/.DS_Store +0 -0
  95. package/demo/flow.html +98 -98
  96. package/demo/graph.html +53 -53
  97. package/demo/image/nakopad-icon256.png +0 -0
  98. package/demo/index.html +133 -133
  99. package/demo/js/common.js +17 -17
  100. package/demo/js/turtle3d_test.js +44 -44
  101. package/demo/js/turtle_test.js +45 -45
  102. package/demo/nako3/calc.nako3 +4 -4
  103. package/demo/runscript.html +47 -47
  104. package/demo/runscript2.html +33 -33
  105. package/demo/runscript3.html +35 -35
  106. package/demo/runscript4.html +33 -33
  107. package/demo/turtle.html +58 -58
  108. package/demo/turtle2.html +141 -141
  109. package/demo/turtle3.html +279 -279
  110. package/demo/turtle3d.html +58 -58
  111. package/demo/turtle3d2.html +107 -107
  112. package/demo/version.html +24 -24
  113. package/doc/SETUP.md +157 -157
  114. package/doc/about.md +17 -17
  115. package/doc/browsers.md +26 -26
  116. package/doc/docgen.md +21 -21
  117. package/doc/editor.md +44 -44
  118. package/doc/files.md +39 -39
  119. package/doc/plugins.md +234 -234
  120. package/doc/release.md +79 -79
  121. package/doc/textlint.md +43 -43
  122. package/doc/win32.md +57 -57
  123. package/package.json +195 -195
  124. package/release/_hash.txt +28 -28
  125. package/release/_script-tags.txt +14 -14
  126. package/release/command.json +1 -1
  127. package/release/command.json.js +1 -1
  128. package/release/command_cnako3.json +1 -1
  129. package/release/command_list.json +1 -1
  130. package/release/editor.js +1 -1
  131. package/release/nako_gen_async.js +2 -1
  132. package/release/nako_gen_async.js.LICENSE.txt +35 -0
  133. package/release/plugin_caniuse.js.LICENSE.txt +11 -0
  134. package/release/plugin_csv.js +1 -1
  135. package/release/plugin_csv.js.LICENSE.txt +15 -0
  136. package/release/plugin_datetime.js.LICENSE.txt +15 -0
  137. package/release/plugin_kansuji.js.LICENSE.txt +3 -0
  138. package/release/plugin_markup.js.LICENSE.txt +11 -0
  139. package/release/plugin_turtle.js.LICENSE.txt +15 -0
  140. package/release/plugin_webworker.js.LICENSE.txt +3 -0
  141. package/release/plugin_weykturtle3d.js.LICENSE.txt +3 -0
  142. package/release/stats.json +1 -1
  143. package/release/version.js +1 -1
  144. package/release/wnako3.js +1 -1
  145. package/release/wnako3.js.LICENSE.txt +203 -1
  146. package/release/wnako3webworker.js +2 -1
  147. package/release/wnako3webworker.js.LICENSE.txt +131 -0
  148. package/src/.DS_Store +0 -0
  149. package/src/browsers.txt +12 -11
  150. package/src/browsers_agents.json +2 -2
  151. package/src/browsers_agents.mjs +1 -1
  152. package/src/cnako3.mjs +17 -17
  153. package/src/cnako3.mts +18 -18
  154. package/src/cnako3mod.mjs +682 -707
  155. package/src/cnako3mod.mts +688 -712
  156. package/src/commander_ja.mjs +164 -164
  157. package/src/commander_ja.mts +161 -161
  158. package/src/enako3.mjs +68 -68
  159. package/src/era.mjs +22 -22
  160. package/src/image_turtle-elephant.mjs +2 -2
  161. package/src/image_turtle-panda.mjs +2 -2
  162. package/src/image_turtle64.mjs +2 -2
  163. package/src/index.mjs +9 -9
  164. package/src/index.mts +10 -10
  165. package/src/nako3editorfix.sfd +106 -106
  166. package/src/nako_version.mjs +8 -8
  167. package/src/nako_version.mts +2 -2
  168. package/src/plugin_browser.mjs +213 -213
  169. package/src/plugin_browser.mts +206 -206
  170. package/src/plugin_browser_ajax.mjs +399 -399
  171. package/src/plugin_browser_audio.mjs +109 -109
  172. package/src/plugin_browser_canvas.mjs +449 -449
  173. package/src/plugin_browser_chart.mjs +294 -294
  174. package/src/plugin_browser_color.mjs +49 -49
  175. package/src/plugin_browser_crypto.mjs +26 -26
  176. package/src/plugin_browser_dialog.mjs +53 -53
  177. package/src/plugin_browser_dom_basic.mjs +336 -336
  178. package/src/plugin_browser_dom_event.mjs +193 -193
  179. package/src/plugin_browser_dom_parts.mjs +396 -396
  180. package/src/plugin_browser_geolocation.mjs +51 -51
  181. package/src/plugin_browser_hotkey.mjs +25 -25
  182. package/src/plugin_browser_html.mjs +59 -59
  183. package/src/plugin_browser_in_worker.mjs +45 -45
  184. package/src/plugin_browser_location.mjs +21 -21
  185. package/src/plugin_browser_speech.mjs +111 -111
  186. package/src/plugin_browser_storage.mjs +121 -121
  187. package/src/plugin_browser_system.mjs +31 -31
  188. package/src/plugin_browser_websocket.mjs +73 -73
  189. package/src/plugin_caniuse.mjs +29 -29
  190. package/src/plugin_datetime.mjs +394 -394
  191. package/src/plugin_httpserver.mjs +277 -277
  192. package/src/plugin_httpserver.mts +286 -286
  193. package/src/plugin_kansuji.mjs +224 -224
  194. package/src/plugin_keigo.mjs +55 -55
  195. package/src/plugin_markup.mjs +32 -32
  196. package/src/plugin_node.mjs +1047 -1047
  197. package/src/plugin_node.mts +980 -980
  198. package/src/plugin_turtle.mjs +647 -647
  199. package/src/plugin_webworker.mjs +334 -334
  200. package/src/plugin_weykturtle3d.mjs +1214 -1214
  201. package/src/plugin_worker.mjs +95 -95
  202. package/src/repl.nako3 +63 -63
  203. package/src/wnako3.mjs +12 -12
  204. package/src/wnako3.mts +11 -11
  205. package/src/wnako3_editor.css +215 -215
  206. package/src/wnako3_editor.mjs +1542 -1542
  207. package/src/wnako3_editor.mts +1658 -1657
  208. package/src/wnako3mod.mjs +213 -213
  209. package/src/wnako3mod.mts +214 -214
  210. package/src/wnako3webworker.mjs +69 -69
  211. package/test/.DS_Store +0 -0
  212. package/test/ace_editor/karma.config.js +94 -94
  213. package/test/ace_editor/test/.babelrc.json +3 -3
  214. package/test/ace_editor/test/ace_editor_test.js +178 -178
  215. package/test/ace_editor/test/html/custom_context.html +139 -139
  216. package/test/async/async_basic_test.mjs +122 -122
  217. package/test/browser/.DS_Store +0 -0
  218. package/test/browser/karma.config.js +221 -221
  219. package/test/browser/test/.babelrc.json +3 -3
  220. package/test/browser/test/compare_util.js +50 -50
  221. package/test/browser/test/html/div_basic.html +2 -2
  222. package/test/browser/test/html/event_dom_form.html +4 -4
  223. package/test/browser/test/html/event_dom_scrolldiv.html +5 -5
  224. package/test/browser/test/import_plugin_checker.js +24 -24
  225. package/test/browser/test/plugin_browser_test.js +51 -51
  226. package/test/browser/test/plugin_browser_test_ajax.js +123 -123
  227. package/test/browser/test/plugin_browser_test_color.js +18 -18
  228. package/test/browser/test/plugin_browser_test_dialog.js +72 -72
  229. package/test/browser/test/plugin_browser_test_dom_event.js +598 -598
  230. package/test/browser/test/plugin_browser_test_dom_parts.js +125 -125
  231. package/test/browser/test/plugin_browser_test_system.js +9 -9
  232. package/test/browser/test/plugin_turtle_test.js +817 -817
  233. package/test/browser/test/plugin_webworker_test.js +86 -86
  234. package/test/browser/test/require_test.js +68 -68
  235. package/test/bundled/.DS_Store +0 -0
  236. package/test/bundled/karma.config.base.js +117 -117
  237. package/test/bundled/karma.config.js +86 -86
  238. package/test/bundled/test/.babelrc.json +3 -3
  239. package/test/bundled/test/bundled_test.js +69 -69
  240. package/test/bundled/test/html/custom_context.html +65 -65
  241. package/test/bundled/test/html/custom_debug.html +66 -66
  242. package/test/bundled/test4b.cmd +52 -52
  243. package/test/bundled/test_base/.DS_Store +0 -0
  244. package/test/bundled/test_base/.babelrc.json +3 -3
  245. package/test/bundled/test_base/_checktool_test.js +25 -25
  246. package/test/bundled/test_base/basic_ajax_test.js +56 -56
  247. package/test/bundled/test_base/basic_async_test.js +18 -18
  248. package/test/bundled/test_base/basic_test.js +153 -153
  249. package/test/bundled/test_base/calc_test.js +132 -132
  250. package/test/bundled/test_base/css/browsers_box.css +114 -114
  251. package/test/bundled/test_base/html/custom_context.html +69 -69
  252. package/test/bundled/test_base/html/custom_debug.html +71 -71
  253. package/test/bundled/test_base/js/browsers_box.js +72 -72
  254. package/test/bundled/test_base/plugin_csv_test.js +37 -37
  255. package/test/bundled/test_base/plugin_datetime_test.js +115 -115
  256. package/test/bundled/test_base/plugin_kansuji_test.js +49 -49
  257. package/test/bundled/test_base/plugin_system_test.js +410 -410
  258. package/test/bundled/test_base/plugin_webworker_test.js +53 -53
  259. package/test/bundled/test_base/test_utils.js +191 -191
  260. package/test/common/.DS_Store +0 -0
  261. package/test/common/plugin_browser_test.mjs +22 -22
  262. package/test/common/plugin_browser_ut_audio_test.mjs +108 -108
  263. package/test/common/plugin_browser_ut_color_test.mjs +21 -21
  264. package/test/common/plugin_browser_ut_dialog_test.mjs +100 -100
  265. package/test/common/plugin_browser_ut_html_test.mjs +13 -13
  266. package/test/common/plugin_browser_ut_system_test.mjs +10 -10
  267. package/test/common/plugin_markup_test.mjs +23 -23
  268. package/test/jsconfig.json +19 -19
  269. package/test/karma.config.js +91 -91
  270. package/test/node/.DS_Store +0 -0
  271. package/test/node/async_test.mjs +96 -96
  272. package/test/node/commander_ja_test.mjs +89 -89
  273. package/test/node/error_message_test.mjs +243 -243
  274. package/test/node/kai_test.nako3 +6 -6
  275. package/test/node/node_test.mjs +60 -60
  276. package/test/node/plugin_broken.js.txt +3 -3
  277. package/test/node/plugin_browser_ut_ajax_test.mjs.todo +357 -357
  278. package/test/node/plugin_browser_ut_location_test.mjs +42 -42
  279. package/test/node/plugin_markup_test.mjs +47 -47
  280. package/test/node/plugin_math_test.mjs +45 -45
  281. package/test/node/plugin_node_test.mjs +98 -98
  282. package/test/node/plugin_test.mjs +44 -44
  283. package/test/node/relative_import_test_1.nako3 +1 -1
  284. package/test/node/relative_import_test_2.nako3 +2 -2
  285. package/test/node/require_nako3_test.mjs +67 -67
  286. package/test/node/requiretest.nako3 +4 -4
  287. package/test/node/requiretest_indirect.nako3 +1 -1
  288. package/test/node/requiretest_name.nako3 +5 -5
  289. package/test/node/runtime_error.nako3 +2 -2
  290. package/test/node/scope1.nako3 +10 -10
  291. package/test/node/scope2.nako3 +12 -12
  292. package/test/node/side_effects_test.mjs +39 -39
  293. package/test/node/sjis.txt +5 -5
  294. package/test/node/syntax_error.nako3 +1 -1
  295. package/test/node/wnako3_editor_test.mjs +384 -384
  296. package/tools/.DS_Store +0 -0
  297. package/tools/README.md +12 -12
  298. package/tools/check_new_version.nako3 +25 -25
  299. package/tools/nako3edit/.DS_Store +0 -0
  300. package/tools/nako3edit/a.sqlite3 +0 -0
  301. package/tools/nako3edit/html/.DS_Store +0 -0
  302. package/tools/nako3edit/html/daisyui/LICENSE +22 -22
  303. package/tools/nako3edit/html/daisyui/version_2.14.1 +1 -1
  304. package/tools/nako3edit/html/edit.html +170 -170
  305. package/tools/nako3edit/html/edit_plugin.js +6 -6
  306. package/tools/nako3edit/html/files.html +125 -125
  307. package/tools/nako3edit/html/nako3edit.css +65 -65
  308. package/tools/nako3edit/index.mjs +248 -248
  309. package/tools/nako3server/index.html +10 -10
  310. package/tools/nako3server/index.mjs +116 -116
  311. package/tools/nako3server/index.nako3 +34 -34
  312. package/core/.editorconfig +0 -6
  313. package/core/.eslintrc.cjs +0 -33
  314. package/core/.github/dependabot.yml +0 -7
  315. package/core/.github/workflows/nodejs.yml +0 -37
  316. package/core/.github/workflows/super-linter.yml +0 -61
  317. package/core/.github/workflows/textlint.yml +0 -199
  318. package/core/index.mts +0 -21
  319. package/core/test/array_test.mjs +0 -34
  320. package/core/test/basic_test.mjs +0 -344
  321. package/core/test/calc_test.mjs +0 -140
  322. package/core/test/core_module_test.mjs +0 -23
  323. package/core/test/debug_test.mjs +0 -16
  324. package/core/test/dncl_test.mjs +0 -94
  325. package/core/test/error_message_test.mjs +0 -210
  326. package/core/test/error_test.mjs +0 -16
  327. package/core/test/flow_test.mjs +0 -373
  328. package/core/test/func_call.mjs +0 -160
  329. package/core/test/func_test.mjs +0 -149
  330. package/core/test/indent_test.mjs +0 -364
  331. package/core/test/lex_test.mjs +0 -168
  332. package/core/test/literal_test.mjs +0 -73
  333. package/core/test/nako_lexer_test.mjs +0 -35
  334. package/core/test/nako_logger_test.mjs +0 -76
  335. package/core/test/nako_logger_test.mts +0 -78
  336. package/core/test/plugin_csv_test.mjs +0 -38
  337. package/core/test/plugin_promise_test.mjs +0 -18
  338. package/core/test/plugin_system_test.mjs +0 -630
  339. package/core/test/prepare_test.mjs +0 -96
  340. package/core/test/re_test.mjs +0 -22
  341. package/core/test/side_effects_test.mjs +0 -92
  342. package/core/test/variable_scope_test.mjs +0 -149
  343. package/core/tsconfig.json +0 -101
@@ -1,394 +1,394 @@
1
- // PluginDateTime
2
- import dayjs from 'dayjs'
3
- import _ja from 'dayjs/locale/ja.js'
4
-
5
- import era from './era.mjs'
6
-
7
- const PluginDateTime = {
8
- '初期化': {
9
- type: 'func',
10
- josi: [],
11
- pure: true,
12
- fn: function (sys) {
13
- }
14
- },
15
- // @日時処理
16
- '元号データ': { type: 'const', value: era }, // @げんごうでーた
17
- '今': { // @現在時刻を「HH:mm:ss」の形式で返す // @いま
18
- type: 'func',
19
- josi: [],
20
- pure: true,
21
- fn: function () {
22
- return dayjs().format('HH:mm:ss')
23
- }
24
- },
25
- 'システム時間': { // @現在のUNIX時間 (UTC(1970/1/1)からの経過秒数) を返す // @しすてむじかん
26
- type: 'func',
27
- josi: [],
28
- pure: true,
29
- fn: function () {
30
- return dayjs().unix()
31
- }
32
- },
33
- '今日': { // @今日の日付を「YYYY/MM/DD」の形式で返す // @きょう
34
- type: 'func',
35
- josi: [],
36
- pure: true,
37
- fn: function () {
38
- return dayjs().format('YYYY/MM/DD')
39
- }
40
- },
41
- '明日': { // @明日の日付を「YYYY/MM/DD」の形式で返す (v1非互換) // @あす
42
- type: 'func',
43
- josi: [],
44
- pure: true,
45
- fn: function () {
46
- return dayjs().add(1, 'days').format('YYYY/MM/DD')
47
- }
48
- },
49
- '昨日': { // @昨日の日付を「YYYY/MM/DD」の形式で返す (v1非互換) // @きのう
50
- type: 'func',
51
- josi: [],
52
- pure: true,
53
- fn: function () {
54
- return dayjs().subtract(1, 'days').format('YYYY/MM/DD')
55
- }
56
- },
57
- '今年': { // @今年が何年かを西暦で返す // @ことし
58
- type: 'func',
59
- josi: [],
60
- pure: true,
61
- fn: function () {
62
- return dayjs().year()
63
- }
64
- },
65
- '来年': { // @来年が何年かを西暦で返す // @らいねん
66
- type: 'func',
67
- josi: [],
68
- pure: true,
69
- fn: function () {
70
- return dayjs().add(1, 'years').year()
71
- }
72
- },
73
- '去年': { // @去年が何年かを西暦で返す // @きょねん
74
- type: 'func',
75
- josi: [],
76
- pure: true,
77
- fn: function () {
78
- return dayjs().subtract(1, 'years').year()
79
- }
80
- },
81
- '今月': { // @今月が何月かを返す // @こんげつ
82
- type: 'func',
83
- josi: [],
84
- pure: true,
85
- fn: function () {
86
- return dayjs().month() + 1
87
- }
88
- },
89
- '来月': { // @来月が何月かを返す // @らいげつ
90
- type: 'func',
91
- josi: [],
92
- pure: true,
93
- fn: function () {
94
- return dayjs().add(1, 'months').month() + 1
95
- }
96
- },
97
- '先月': { // @先月が何月かを返す // @せんげつ
98
- type: 'func',
99
- josi: [],
100
- pure: true,
101
- fn: function () {
102
- return dayjs().subtract(1, 'months').month() + 1
103
- }
104
- },
105
- '曜日': { // @日付Sの曜日を返す // @ようび
106
- type: 'func',
107
- josi: [['の']],
108
- pure: true,
109
- fn: function (s) {
110
- return dayjs(s, 'YYYY/MM/DD').locale('ja').format('ddd')
111
- }
112
- },
113
- '曜日番号取得': { // @Sに指定した日付の曜日番号をで返す。不正な日付の場合は今日の曜日番号を返す。(0=日/1=月/2=火/3=水/4=木/5=金/6=土) // @ようびばんごうしゅとく
114
- type: 'func',
115
- josi: [['の']],
116
- pure: true,
117
- fn: function (s) {
118
- let t = dayjs(s, 'YYYY/MM/DD')
119
- if (!t.isValid()) {
120
- t = dayjs()
121
- }
122
-
123
- return t.locale('ja').format('d')
124
- }
125
- },
126
- 'UNIX時間変換': { // @日時SをUNIX時間 (UTC(1970/1/1)からの経過秒数) に変換して返す(v1非互換) // @UNIXじかんへんかん
127
- type: 'func',
128
- josi: [['の', 'を', 'から']],
129
- pure: false,
130
- fn: function (s, sys) {
131
- return sys.__exec('UNIXTIME変換', [s])
132
- }
133
- },
134
- 'UNIXTIME変換': { // @日時SをUNIX時間 (UTC(1970/1/1)からの経過秒数) に変換して返す // @UNIXTIMEへんかん
135
- type: 'func',
136
- josi: [['の', 'を', 'から']],
137
- pure: true,
138
- fn: function (s) {
139
- return dayjs(s, 'YYYY/MM/DD HH:mm:ss').unix()
140
- }
141
- },
142
- '日時変換': { // @UNIX時間 (UTC(1970/1/1)からの経過秒数) を「YYYY/MM/DD HH:mm:ss」の形式に変換 // @にちじへんかん
143
- type: 'func',
144
- josi: [['を', 'から']],
145
- pure: true,
146
- fn: function (tm) {
147
- return dayjs.unix(tm).format('YYYY/MM/DD HH:mm:ss')
148
- }
149
- },
150
- '和暦変換': { // @Sを和暦に変換する。Sは明治以降の日付が有効。 // @われきへんかん
151
- type: 'func',
152
- josi: [['を']],
153
- pure: true,
154
- fn: function (s, sys) {
155
- const date = dayjs(s, 'YYYY/MM/DD')
156
-
157
- for (const era of sys.__v0['元号データ']) {
158
- const eraBeginDate = dayjs(era['改元日'], 'YYYY/MM/DD')
159
- if (eraBeginDate <= date) {
160
- let eraYear = date.format('YYYY') - eraBeginDate.format('YYYY') + 1
161
-
162
- if (eraYear === 1) {
163
- eraYear = '元'
164
- }
165
-
166
- return era['元号'] + eraYear + '/' + date.format('MM/DD')
167
- }
168
- }
169
-
170
- throw new Error('『和暦変換』は明治以前の日付には対応していません。')
171
- }
172
- },
173
- '年数差': { // @日付AとBの差を年数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @ねんすうさ
174
- type: 'func',
175
- josi: [['と', 'から'], ['の', 'までの']],
176
- pure: false,
177
- fn: function (a, b, sys) {
178
- return sys.__exec('日時差', [a, b, '年'])
179
- }
180
- },
181
- '月数差': { // @日付AとBの差を月数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @げっすうさ
182
- type: 'func',
183
- josi: [['と', 'から'], ['の', 'までの']],
184
- pure: false,
185
- fn: function (a, b, sys) {
186
- return sys.__exec('日時差', [a, b, '月'])
187
- }
188
- },
189
- '日数差': { // @日付AとBの差を日数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @にっすうさ
190
- type: 'func',
191
- josi: [['と', 'から'], ['の', 'までの']],
192
- pure: false,
193
- fn: function (a, b, sys) {
194
- return sys.__exec('日時差', [a, b, '日'])
195
- }
196
- },
197
- '日時差': { // @日時AとBの差を種類unitで返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @にちじさ
198
- type: 'func',
199
- josi: [['と', 'から'], ['の', 'までの'], ['による']],
200
- pure: true,
201
- fn: function (a, b, unit) {
202
- switch (unit) {
203
- case '年':
204
- unit = 'years'
205
- break
206
- case '月':
207
- unit = 'months'
208
- break
209
- case '日':
210
- unit = 'days'
211
- break
212
- case '時間':
213
- unit = 'hours'
214
- break
215
- case '分':
216
- unit = 'minutes'
217
- break
218
- case '秒':
219
- unit = 'seconds'
220
- break
221
- default:
222
- break
223
- }
224
-
225
- const maxCount = 2
226
-
227
- for (let i = 0; i < maxCount; i++) {
228
- const dts = []
229
-
230
- for (const s of [b, a]) {
231
- let s_ = s
232
-
233
- if (i === maxCount - 1) {
234
- s_ = '1980/01/01 ' + s_
235
- }
236
-
237
- const t = dayjs(s_, 'YYYY/MM/DD HH:mm:ss')
238
-
239
- if (t.isValid()) {
240
- dts.push(t)
241
- }
242
- }
243
-
244
- if (dts.length === 2) {
245
- return dts[0].diff(dts[1], unit)
246
- }
247
- }
248
-
249
- throw new Error('時間差が正常に算出できませんでした。')
250
- }
251
- },
252
- '時間差': { // @時間AとBの時間の差を求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @じかんさ
253
- type: 'func',
254
- josi: [['と', 'から'], ['の', 'までの']],
255
- pure: false,
256
- fn: function (a, b, sys) {
257
- return sys.__exec('日時差', [a, b, '時間'])
258
- }
259
- },
260
- '分差': { // @時間AとBの分数の差を求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @ふんさ
261
- type: 'func',
262
- josi: [['と', 'から'], ['の', 'までの']],
263
- pure: false,
264
- fn: function (a, b, sys) {
265
- return sys.__exec('日時差', [a, b, '分'])
266
- }
267
- },
268
- '秒差': { // @時間AとBの差を秒差で求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @びょうさ
269
- type: 'func',
270
- josi: [['と', 'から'], ['の', 'までの']],
271
- pure: false,
272
- fn: function (a, b, sys) {
273
- return sys.__exec('日時差', [a, b, '秒'])
274
- }
275
- },
276
- '時間加算': { // @時間SにAを加えて返す。Aには「(+|-)hh:nn:dd」で指定する。 // @じかんかさん
277
- type: 'func',
278
- josi: [['に'], ['を']],
279
- pure: false,
280
- fn: function (s, a, sys) {
281
- const pm = a.slice(0, 1)
282
-
283
- if (pm !== '+' && pm !== '-') {
284
- throw new Error('『時間加算』命令の引数Aは「(+|-)hh:nn:dd」で指定します。')
285
- }
286
-
287
- const n = a.slice(1).split(':')
288
- const units = ['時間', '分', '秒']
289
-
290
- for (let i = 0; i < n.length; i++) {
291
- s = sys.__exec('日時加算', [s, pm + n[i] + units[i]])
292
- }
293
-
294
- return s
295
- }
296
- },
297
- '日付加算': { // @日付SにAを加えて返す。Aには「(+|-)yyyy/mm/dd」で指定する。 // @ひづけかさん
298
- type: 'func',
299
- josi: [['に'], ['を']],
300
- pure: false,
301
- fn: function (s, a, sys) {
302
- const pm = a.slice(0, 1)
303
-
304
- if (pm !== '+' && pm !== '-') {
305
- throw new Error('『日付加算』命令の引数Aは「(+|-)yyyy/mm/dd」で指定します。')
306
- }
307
-
308
- const n = a.slice(1).split('/')
309
- const units = ['年', 'ヶ月', '日']
310
-
311
- for (let i = 0; i < n.length; i++) {
312
- s = sys.__exec('日時加算', [s, pm + n[i] + units[i]])
313
- }
314
-
315
- return s
316
- }
317
- },
318
-
319
- '日時加算': { // @日時SにAを加えて返す。Aは「(+|-)1(年|ヶ月|日|時間|分|秒)」のように指定する (v1非互換)。 // @にちじかさん
320
- type: 'func',
321
- josi: [['に'], ['を']],
322
- pure: true,
323
- fn: function (s, a) {
324
- let unit
325
- switch (a.match(/(年|ヶ月|日|時間|分|秒)$/)[0]) {
326
- case '年':
327
- unit = 'years'
328
- break
329
- case 'ヶ月':
330
- unit = 'months'
331
- break
332
- case '日':
333
- unit = 'days'
334
- break
335
- case '時間':
336
- unit = 'hours'
337
- break
338
- case '分':
339
- unit = 'minutes'
340
- break
341
- case '秒':
342
- unit = 'seconds'
343
- break
344
- default:
345
- break
346
- }
347
-
348
- const dateFormat = 'YYYY/MM/DD'
349
- const timeFormat = 'HH:mm:ss'
350
- const datetimeFormat = [dateFormat, timeFormat].join(' ')
351
- const maxCount = 2
352
-
353
- for (let i = 0; i < maxCount; i++) {
354
- let s_ = s
355
- let outputFormat
356
-
357
- if (i === maxCount - 1) {
358
- s_ = '1980/01/01 ' + s_
359
- outputFormat = timeFormat
360
- } else if (s_.indexOf(':') === -1) {
361
- outputFormat = dateFormat
362
- } else {
363
- outputFormat = datetimeFormat
364
- }
365
-
366
- let t = dayjs(s_, datetimeFormat)
367
-
368
- if (t.isValid()) {
369
- const n = a.match(/[0-9]+/)[0]
370
-
371
- switch (a.slice(0, 1)) {
372
- case '+':
373
- t = t.add(n, unit)
374
- break
375
- case '-':
376
- t = t.subtract(n, unit)
377
- break
378
- default:
379
- throw new Error('『日時加算』命令の引数Aは「(+|-)1(年|ヶ月|日|時間|分|秒)」のように指定します。')
380
- }
381
-
382
- return t.format(outputFormat)
383
- }
384
- }
385
- throw new Error('日時を正常に加算できませんでした。')
386
- }
387
- }
388
- }
389
-
390
- export default PluginDateTime
391
-
392
- // scriptタグで取り込んだ時、自動で登録する
393
- /* istanbul ignore else */
394
- if (typeof (navigator) === 'object' && typeof (navigator.nako3) === 'object') { navigator.nako3.addPluginObject('PluginDateTime', PluginDateTime) }
1
+ // PluginDateTime
2
+ import dayjs from 'dayjs'
3
+ import _ja from 'dayjs/locale/ja.js'
4
+
5
+ import era from './era.mjs'
6
+
7
+ const PluginDateTime = {
8
+ '初期化': {
9
+ type: 'func',
10
+ josi: [],
11
+ pure: true,
12
+ fn: function (sys) {
13
+ }
14
+ },
15
+ // @日時処理
16
+ '元号データ': { type: 'const', value: era }, // @げんごうでーた
17
+ '今': { // @現在時刻を「HH:mm:ss」の形式で返す // @いま
18
+ type: 'func',
19
+ josi: [],
20
+ pure: true,
21
+ fn: function () {
22
+ return dayjs().format('HH:mm:ss')
23
+ }
24
+ },
25
+ 'システム時間': { // @現在のUNIX時間 (UTC(1970/1/1)からの経過秒数) を返す // @しすてむじかん
26
+ type: 'func',
27
+ josi: [],
28
+ pure: true,
29
+ fn: function () {
30
+ return dayjs().unix()
31
+ }
32
+ },
33
+ '今日': { // @今日の日付を「YYYY/MM/DD」の形式で返す // @きょう
34
+ type: 'func',
35
+ josi: [],
36
+ pure: true,
37
+ fn: function () {
38
+ return dayjs().format('YYYY/MM/DD')
39
+ }
40
+ },
41
+ '明日': { // @明日の日付を「YYYY/MM/DD」の形式で返す (v1非互換) // @あす
42
+ type: 'func',
43
+ josi: [],
44
+ pure: true,
45
+ fn: function () {
46
+ return dayjs().add(1, 'days').format('YYYY/MM/DD')
47
+ }
48
+ },
49
+ '昨日': { // @昨日の日付を「YYYY/MM/DD」の形式で返す (v1非互換) // @きのう
50
+ type: 'func',
51
+ josi: [],
52
+ pure: true,
53
+ fn: function () {
54
+ return dayjs().subtract(1, 'days').format('YYYY/MM/DD')
55
+ }
56
+ },
57
+ '今年': { // @今年が何年かを西暦で返す // @ことし
58
+ type: 'func',
59
+ josi: [],
60
+ pure: true,
61
+ fn: function () {
62
+ return dayjs().year()
63
+ }
64
+ },
65
+ '来年': { // @来年が何年かを西暦で返す // @らいねん
66
+ type: 'func',
67
+ josi: [],
68
+ pure: true,
69
+ fn: function () {
70
+ return dayjs().add(1, 'years').year()
71
+ }
72
+ },
73
+ '去年': { // @去年が何年かを西暦で返す // @きょねん
74
+ type: 'func',
75
+ josi: [],
76
+ pure: true,
77
+ fn: function () {
78
+ return dayjs().subtract(1, 'years').year()
79
+ }
80
+ },
81
+ '今月': { // @今月が何月かを返す // @こんげつ
82
+ type: 'func',
83
+ josi: [],
84
+ pure: true,
85
+ fn: function () {
86
+ return dayjs().month() + 1
87
+ }
88
+ },
89
+ '来月': { // @来月が何月かを返す // @らいげつ
90
+ type: 'func',
91
+ josi: [],
92
+ pure: true,
93
+ fn: function () {
94
+ return dayjs().add(1, 'months').month() + 1
95
+ }
96
+ },
97
+ '先月': { // @先月が何月かを返す // @せんげつ
98
+ type: 'func',
99
+ josi: [],
100
+ pure: true,
101
+ fn: function () {
102
+ return dayjs().subtract(1, 'months').month() + 1
103
+ }
104
+ },
105
+ '曜日': { // @日付Sの曜日を返す // @ようび
106
+ type: 'func',
107
+ josi: [['の']],
108
+ pure: true,
109
+ fn: function (s) {
110
+ return dayjs(s, 'YYYY/MM/DD').locale('ja').format('ddd')
111
+ }
112
+ },
113
+ '曜日番号取得': { // @Sに指定した日付の曜日番号をで返す。不正な日付の場合は今日の曜日番号を返す。(0=日/1=月/2=火/3=水/4=木/5=金/6=土) // @ようびばんごうしゅとく
114
+ type: 'func',
115
+ josi: [['の']],
116
+ pure: true,
117
+ fn: function (s) {
118
+ let t = dayjs(s, 'YYYY/MM/DD')
119
+ if (!t.isValid()) {
120
+ t = dayjs()
121
+ }
122
+
123
+ return t.locale('ja').format('d')
124
+ }
125
+ },
126
+ 'UNIX時間変換': { // @日時SをUNIX時間 (UTC(1970/1/1)からの経過秒数) に変換して返す(v1非互換) // @UNIXじかんへんかん
127
+ type: 'func',
128
+ josi: [['の', 'を', 'から']],
129
+ pure: false,
130
+ fn: function (s, sys) {
131
+ return sys.__exec('UNIXTIME変換', [s])
132
+ }
133
+ },
134
+ 'UNIXTIME変換': { // @日時SをUNIX時間 (UTC(1970/1/1)からの経過秒数) に変換して返す // @UNIXTIMEへんかん
135
+ type: 'func',
136
+ josi: [['の', 'を', 'から']],
137
+ pure: true,
138
+ fn: function (s) {
139
+ return dayjs(s, 'YYYY/MM/DD HH:mm:ss').unix()
140
+ }
141
+ },
142
+ '日時変換': { // @UNIX時間 (UTC(1970/1/1)からの経過秒数) を「YYYY/MM/DD HH:mm:ss」の形式に変換 // @にちじへんかん
143
+ type: 'func',
144
+ josi: [['を', 'から']],
145
+ pure: true,
146
+ fn: function (tm) {
147
+ return dayjs.unix(tm).format('YYYY/MM/DD HH:mm:ss')
148
+ }
149
+ },
150
+ '和暦変換': { // @Sを和暦に変換する。Sは明治以降の日付が有効。 // @われきへんかん
151
+ type: 'func',
152
+ josi: [['を']],
153
+ pure: true,
154
+ fn: function (s, sys) {
155
+ const date = dayjs(s, 'YYYY/MM/DD')
156
+
157
+ for (const era of sys.__v0['元号データ']) {
158
+ const eraBeginDate = dayjs(era['改元日'], 'YYYY/MM/DD')
159
+ if (eraBeginDate <= date) {
160
+ let eraYear = date.format('YYYY') - eraBeginDate.format('YYYY') + 1
161
+
162
+ if (eraYear === 1) {
163
+ eraYear = '元'
164
+ }
165
+
166
+ return era['元号'] + eraYear + '/' + date.format('MM/DD')
167
+ }
168
+ }
169
+
170
+ throw new Error('『和暦変換』は明治以前の日付には対応していません。')
171
+ }
172
+ },
173
+ '年数差': { // @日付AとBの差を年数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @ねんすうさ
174
+ type: 'func',
175
+ josi: [['と', 'から'], ['の', 'までの']],
176
+ pure: false,
177
+ fn: function (a, b, sys) {
178
+ return sys.__exec('日時差', [a, b, '年'])
179
+ }
180
+ },
181
+ '月数差': { // @日付AとBの差を月数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @げっすうさ
182
+ type: 'func',
183
+ josi: [['と', 'から'], ['の', 'までの']],
184
+ pure: false,
185
+ fn: function (a, b, sys) {
186
+ return sys.__exec('日時差', [a, b, '月'])
187
+ }
188
+ },
189
+ '日数差': { // @日付AとBの差を日数で求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @にっすうさ
190
+ type: 'func',
191
+ josi: [['と', 'から'], ['の', 'までの']],
192
+ pure: false,
193
+ fn: function (a, b, sys) {
194
+ return sys.__exec('日時差', [a, b, '日'])
195
+ }
196
+ },
197
+ '日時差': { // @日時AとBの差を種類unitで返す。A<Bなら正の数、そうでないなら負の数を返す (v1非互換)。 // @にちじさ
198
+ type: 'func',
199
+ josi: [['と', 'から'], ['の', 'までの'], ['による']],
200
+ pure: true,
201
+ fn: function (a, b, unit) {
202
+ switch (unit) {
203
+ case '年':
204
+ unit = 'years'
205
+ break
206
+ case '月':
207
+ unit = 'months'
208
+ break
209
+ case '日':
210
+ unit = 'days'
211
+ break
212
+ case '時間':
213
+ unit = 'hours'
214
+ break
215
+ case '分':
216
+ unit = 'minutes'
217
+ break
218
+ case '秒':
219
+ unit = 'seconds'
220
+ break
221
+ default:
222
+ break
223
+ }
224
+
225
+ const maxCount = 2
226
+
227
+ for (let i = 0; i < maxCount; i++) {
228
+ const dts = []
229
+
230
+ for (const s of [b, a]) {
231
+ let s_ = s
232
+
233
+ if (i === maxCount - 1) {
234
+ s_ = '1980/01/01 ' + s_
235
+ }
236
+
237
+ const t = dayjs(s_, 'YYYY/MM/DD HH:mm:ss')
238
+
239
+ if (t.isValid()) {
240
+ dts.push(t)
241
+ }
242
+ }
243
+
244
+ if (dts.length === 2) {
245
+ return dts[0].diff(dts[1], unit)
246
+ }
247
+ }
248
+
249
+ throw new Error('時間差が正常に算出できませんでした。')
250
+ }
251
+ },
252
+ '時間差': { // @時間AとBの時間の差を求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @じかんさ
253
+ type: 'func',
254
+ josi: [['と', 'から'], ['の', 'までの']],
255
+ pure: false,
256
+ fn: function (a, b, sys) {
257
+ return sys.__exec('日時差', [a, b, '時間'])
258
+ }
259
+ },
260
+ '分差': { // @時間AとBの分数の差を求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @ふんさ
261
+ type: 'func',
262
+ josi: [['と', 'から'], ['の', 'までの']],
263
+ pure: false,
264
+ fn: function (a, b, sys) {
265
+ return sys.__exec('日時差', [a, b, '分'])
266
+ }
267
+ },
268
+ '秒差': { // @時間AとBの差を秒差で求めて返す。A<Bなら正の数、そうでないなら負の数を返す。 // @びょうさ
269
+ type: 'func',
270
+ josi: [['と', 'から'], ['の', 'までの']],
271
+ pure: false,
272
+ fn: function (a, b, sys) {
273
+ return sys.__exec('日時差', [a, b, '秒'])
274
+ }
275
+ },
276
+ '時間加算': { // @時間SにAを加えて返す。Aには「(+|-)hh:nn:dd」で指定する。 // @じかんかさん
277
+ type: 'func',
278
+ josi: [['に'], ['を']],
279
+ pure: false,
280
+ fn: function (s, a, sys) {
281
+ const pm = a.slice(0, 1)
282
+
283
+ if (pm !== '+' && pm !== '-') {
284
+ throw new Error('『時間加算』命令の引数Aは「(+|-)hh:nn:dd」で指定します。')
285
+ }
286
+
287
+ const n = a.slice(1).split(':')
288
+ const units = ['時間', '分', '秒']
289
+
290
+ for (let i = 0; i < n.length; i++) {
291
+ s = sys.__exec('日時加算', [s, pm + n[i] + units[i]])
292
+ }
293
+
294
+ return s
295
+ }
296
+ },
297
+ '日付加算': { // @日付SにAを加えて返す。Aには「(+|-)yyyy/mm/dd」で指定する。 // @ひづけかさん
298
+ type: 'func',
299
+ josi: [['に'], ['を']],
300
+ pure: false,
301
+ fn: function (s, a, sys) {
302
+ const pm = a.slice(0, 1)
303
+
304
+ if (pm !== '+' && pm !== '-') {
305
+ throw new Error('『日付加算』命令の引数Aは「(+|-)yyyy/mm/dd」で指定します。')
306
+ }
307
+
308
+ const n = a.slice(1).split('/')
309
+ const units = ['年', 'ヶ月', '日']
310
+
311
+ for (let i = 0; i < n.length; i++) {
312
+ s = sys.__exec('日時加算', [s, pm + n[i] + units[i]])
313
+ }
314
+
315
+ return s
316
+ }
317
+ },
318
+
319
+ '日時加算': { // @日時SにAを加えて返す。Aは「(+|-)1(年|ヶ月|日|時間|分|秒)」のように指定する (v1非互換)。 // @にちじかさん
320
+ type: 'func',
321
+ josi: [['に'], ['を']],
322
+ pure: true,
323
+ fn: function (s, a) {
324
+ let unit
325
+ switch (a.match(/(年|ヶ月|日|時間|分|秒)$/)[0]) {
326
+ case '年':
327
+ unit = 'years'
328
+ break
329
+ case 'ヶ月':
330
+ unit = 'months'
331
+ break
332
+ case '日':
333
+ unit = 'days'
334
+ break
335
+ case '時間':
336
+ unit = 'hours'
337
+ break
338
+ case '分':
339
+ unit = 'minutes'
340
+ break
341
+ case '秒':
342
+ unit = 'seconds'
343
+ break
344
+ default:
345
+ break
346
+ }
347
+
348
+ const dateFormat = 'YYYY/MM/DD'
349
+ const timeFormat = 'HH:mm:ss'
350
+ const datetimeFormat = [dateFormat, timeFormat].join(' ')
351
+ const maxCount = 2
352
+
353
+ for (let i = 0; i < maxCount; i++) {
354
+ let s_ = s
355
+ let outputFormat
356
+
357
+ if (i === maxCount - 1) {
358
+ s_ = '1980/01/01 ' + s_
359
+ outputFormat = timeFormat
360
+ } else if (s_.indexOf(':') === -1) {
361
+ outputFormat = dateFormat
362
+ } else {
363
+ outputFormat = datetimeFormat
364
+ }
365
+
366
+ let t = dayjs(s_, datetimeFormat)
367
+
368
+ if (t.isValid()) {
369
+ const n = a.match(/[0-9]+/)[0]
370
+
371
+ switch (a.slice(0, 1)) {
372
+ case '+':
373
+ t = t.add(n, unit)
374
+ break
375
+ case '-':
376
+ t = t.subtract(n, unit)
377
+ break
378
+ default:
379
+ throw new Error('『日時加算』命令の引数Aは「(+|-)1(年|ヶ月|日|時間|分|秒)」のように指定します。')
380
+ }
381
+
382
+ return t.format(outputFormat)
383
+ }
384
+ }
385
+ throw new Error('日時を正常に加算できませんでした。')
386
+ }
387
+ }
388
+ }
389
+
390
+ export default PluginDateTime
391
+
392
+ // scriptタグで取り込んだ時、自動で登録する
393
+ /* istanbul ignore else */
394
+ if (typeof (navigator) === 'object' && typeof (navigator.nako3) === 'object') { navigator.nako3.addPluginObject('PluginDateTime', PluginDateTime) }