@rickyhuang/timeutil
Advanced tools
+98
-56
@@ -5,4 +5,5 @@ <?xml version="1.0" encoding="UTF-8"?> | ||
| <list default="true" id="d628b1a0-fa57-4adb-8fff-4551b6ce9d43" name="Default Changelist" comment=""> | ||
| <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" /> | ||
| <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" /> | ||
| <change beforePath="$PROJECT_DIR$/lib/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/lib/index.js" afterDir="false" /> | ||
| <change beforePath="$PROJECT_DIR$/src/index.js" beforeDir="false" afterPath="$PROJECT_DIR$/src/index.js" afterDir="false" /> | ||
| <change beforePath="$PROJECT_DIR$/tests/index.test.js" beforeDir="false" afterPath="$PROJECT_DIR$/tests/index.test.js" afterDir="false" /> | ||
| </list> | ||
@@ -16,10 +17,10 @@ <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> | ||
| <component name="FileEditorManager"> | ||
| <splitter split-orientation="horizontal" split-proportion="0.83588487"> | ||
| <splitter split-orientation="horizontal" split-proportion="0.5548743"> | ||
| <split-first> | ||
| <leaf> | ||
| <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> | ||
| <file pinned="false" current-in-tab="true"> | ||
| <entry file="file://$PROJECT_DIR$/package.json"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="95"> | ||
| <caret line="5" column="14" lean-forward="true" selection-start-line="5" selection-start-column="14" selection-end-line="5" selection-end-column="14" /> | ||
| <state relative-caret-position="152"> | ||
| <caret line="8" column="11" lean-forward="true" selection-start-line="8" selection-start-column="11" selection-end-line="8" selection-end-column="11" /> | ||
| </state> | ||
@@ -30,2 +31,11 @@ </provider> | ||
| <file pinned="false" current-in-tab="false"> | ||
| <entry file="file://$PROJECT_DIR$/src/index.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="418"> | ||
| <caret line="25" column="5" lean-forward="true" selection-start-line="25" selection-start-column="5" selection-end-line="25" selection-end-column="5" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| </file> | ||
| <file pinned="false" current-in-tab="false"> | ||
| <entry file="file://$PROJECT_DIR$/README.md"> | ||
@@ -45,8 +55,8 @@ <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> | ||
| <split-second> | ||
| <leaf> | ||
| <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> | ||
| <file pinned="false" current-in-tab="true"> | ||
| <entry file="file://$PROJECT_DIR$/tests/index.test.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="76"> | ||
| <caret line="4" column="37" selection-start-line="4" selection-start-column="19" selection-end-line="4" selection-end-column="37" /> | ||
| <state relative-caret-position="133"> | ||
| <caret line="7" lean-forward="true" selection-start-line="7" selection-end-line="7" /> | ||
| </state> | ||
@@ -74,7 +84,7 @@ </provider> | ||
| <option value="$PROJECT_DIR$/.editorconfig" /> | ||
| <option value="$PROJECT_DIR$/lib/cli.js" /> | ||
| <option value="$PROJECT_DIR$/README.md" /> | ||
| <option value="$PROJECT_DIR$/src/index.js" /> | ||
| <option value="$PROJECT_DIR$/lib/index.js" /> | ||
| <option value="$PROJECT_DIR$/tests/index.test.js" /> | ||
| <option value="$PROJECT_DIR$/lib/cli.js" /> | ||
| <option value="$PROJECT_DIR$/README.md" /> | ||
| <option value="$PROJECT_DIR$/package.json" /> | ||
@@ -98,2 +108,3 @@ </list> | ||
| <panes> | ||
| <pane id="PackagesPane" /> | ||
| <pane id="Scope" /> | ||
@@ -126,3 +137,2 @@ <pane id="ProjectPane"> | ||
| </pane> | ||
| <pane id="PackagesPane" /> | ||
| </panes> | ||
@@ -133,5 +143,5 @@ </component> | ||
| <property name="aspect.path.notification.shown" value="true" /> | ||
| <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1551339518842" /> | ||
| <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1551339576543" /> | ||
| <property name="editor.config.ad.shown" value="true" /> | ||
| <property name="last_opened_file_path" value="$PROJECT_DIR$" /> | ||
| <property name="last_opened_file_path" value="$PROJECT_DIR$/../Garmin/dailyTest" /> | ||
| <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> | ||
@@ -167,3 +177,5 @@ <property name="nodejs_npm_path_reset_for_default_project" value="true" /> | ||
| <updated>1551336573862</updated> | ||
| <workItem from="1551336575053" duration="2941000" /> | ||
| <workItem from="1551336575053" duration="3039000" /> | ||
| <workItem from="1551342794877" duration="1887000" /> | ||
| <workItem from="1551348008205" duration="340000" /> | ||
| </task> | ||
@@ -191,7 +203,21 @@ <task id="LOCAL-00001" summary="util finish"> | ||
| </task> | ||
| <option name="localTasksCounter" value="4" /> | ||
| <task id="LOCAL-00004" summary="update readme doc,version"> | ||
| <created>1551339533023</created> | ||
| <option name="number" value="00004" /> | ||
| <option name="presentableId" value="LOCAL-00004" /> | ||
| <option name="project" value="LOCAL" /> | ||
| <updated>1551339533023</updated> | ||
| </task> | ||
| <task id="LOCAL-00005" summary="simplify main function"> | ||
| <created>1551348296737</created> | ||
| <option name="number" value="00005" /> | ||
| <option name="presentableId" value="LOCAL-00005" /> | ||
| <option name="project" value="LOCAL" /> | ||
| <updated>1551348296737</updated> | ||
| </task> | ||
| <option name="localTasksCounter" value="6" /> | ||
| <servers /> | ||
| </component> | ||
| <component name="TimeTrackingManager"> | ||
| <option name="totallyTimeSpent" value="2941000" /> | ||
| <option name="totallyTimeSpent" value="5266000" /> | ||
| </component> | ||
@@ -202,14 +228,9 @@ <component name="ToolWindowManager"> | ||
| <layout> | ||
| <window_info id="Image Layers" /> | ||
| <window_info id="Designer" /> | ||
| <window_info id="UI Designer" /> | ||
| <window_info id="Capture Tool" /> | ||
| <window_info id="Favorites" side_tool="true" /> | ||
| <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.12953092" /> | ||
| <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.13166311" /> | ||
| <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> | ||
| <window_info anchor="bottom" id="Docker" show_stripe_button="false" /> | ||
| <window_info anchor="bottom" id="Database Changes" /> | ||
| <window_info anchor="bottom" id="Version Control" weight="0.31127983" /> | ||
| <window_info active="true" anchor="bottom" id="Terminal" visible="true" weight="0.45119306" /> | ||
| <window_info anchor="bottom" id="Event Log" side_tool="true" /> | ||
| <window_info id="Image Layers" order="2" /> | ||
| <window_info id="Designer" order="3" /> | ||
| <window_info id="UI Designer" order="4" /> | ||
| <window_info id="Capture Tool" order="5" /> | ||
| <window_info id="Favorites" order="6" side_tool="true" /> | ||
| <window_info anchor="bottom" id="Message" order="0" /> | ||
@@ -222,11 +243,16 @@ <window_info anchor="bottom" id="Find" order="1" /> | ||
| <window_info anchor="bottom" id="TODO" order="6" /> | ||
| <window_info anchor="right" id="Palette" /> | ||
| <window_info anchor="right" id="Theme Preview" /> | ||
| <window_info anchor="right" id="Maven" /> | ||
| <window_info anchor="right" id="Capture Analysis" /> | ||
| <window_info anchor="right" id="Palette	" /> | ||
| <window_info anchor="right" id="Database" /> | ||
| <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" /> | ||
| <window_info anchor="bottom" id="Version Control" order="8" weight="0.31127983" /> | ||
| <window_info anchor="bottom" id="Database Changes" order="9" /> | ||
| <window_info anchor="bottom" id="Terminal" order="10" visible="true" weight="0.34924078" /> | ||
| <window_info anchor="bottom" id="Event Log" order="11" side_tool="true" /> | ||
| <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> | ||
| <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> | ||
| <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> | ||
| <window_info anchor="right" id="Palette" order="3" /> | ||
| <window_info anchor="right" id="Theme Preview" order="4" /> | ||
| <window_info anchor="right" id="Maven" order="5" /> | ||
| <window_info anchor="right" id="Capture Analysis" order="6" /> | ||
| <window_info anchor="right" id="Palette	" order="7" /> | ||
| <window_info anchor="right" id="Database" order="8" /> | ||
| </layout> | ||
@@ -262,2 +288,16 @@ </component> | ||
| </option> | ||
| <option name="RECENT_FILTERS"> | ||
| <map> | ||
| <entry key="Branch"> | ||
| <value> | ||
| <list /> | ||
| </value> | ||
| </entry> | ||
| <entry key="User"> | ||
| <value> | ||
| <list /> | ||
| </value> | ||
| </entry> | ||
| </map> | ||
| </option> | ||
| </component> | ||
@@ -268,3 +308,5 @@ <component name="VcsManagerConfiguration"> | ||
| <MESSAGE value="update readme doc" /> | ||
| <option name="LAST_COMMIT_MESSAGE" value="update readme doc" /> | ||
| <MESSAGE value="update readme doc,version" /> | ||
| <MESSAGE value="simplify main function" /> | ||
| <option name="LAST_COMMIT_MESSAGE" value="simplify main function" /> | ||
| </component> | ||
@@ -285,20 +327,23 @@ <component name="editorHistoryManager"> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/lib/index.js"> | ||
| <entry file="file://$PROJECT_DIR$/lib/cli.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="530"> | ||
| <caret line="67" lean-forward="true" selection-start-line="67" selection-end-line="67" /> | ||
| <state> | ||
| <caret column="19" selection-start-column="19" selection-end-column="19" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/src/index.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="416"> | ||
| <caret line="65" lean-forward="true" selection-end-line="67" /> | ||
| <entry file="file://$PROJECT_DIR$/README.md"> | ||
| <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> | ||
| <state split_layout="SPLIT"> | ||
| <first_editor relative-caret-position="19"> | ||
| <caret line="1" column="46" selection-start-line="1" selection-start-column="46" selection-end-line="1" selection-end-column="46" /> | ||
| </first_editor> | ||
| <second_editor /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/lib/cli.js"> | ||
| <entry file="file://$PROJECT_DIR$/lib/index.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state> | ||
| <caret column="19" selection-start-column="19" selection-end-column="19" /> | ||
| <state relative-caret-position="589"> | ||
| <caret line="31" lean-forward="true" selection-start-line="31" selection-end-line="31" /> | ||
| </state> | ||
@@ -309,14 +354,11 @@ </provider> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="76"> | ||
| <caret line="4" column="37" selection-start-line="4" selection-start-column="19" selection-end-line="4" selection-end-column="37" /> | ||
| <state relative-caret-position="133"> | ||
| <caret line="7" lean-forward="true" selection-start-line="7" selection-end-line="7" /> | ||
| </state> | ||
| </provider> | ||
| </entry> | ||
| <entry file="file://$PROJECT_DIR$/README.md"> | ||
| <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]"> | ||
| <state split_layout="SPLIT"> | ||
| <first_editor relative-caret-position="19"> | ||
| <caret line="1" column="46" selection-start-line="1" selection-start-column="46" selection-end-line="1" selection-end-column="46" /> | ||
| </first_editor> | ||
| <second_editor /> | ||
| <entry file="file://$PROJECT_DIR$/src/index.js"> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="418"> | ||
| <caret line="25" column="5" lean-forward="true" selection-start-line="25" selection-start-column="5" selection-end-line="25" selection-end-column="5" /> | ||
| </state> | ||
@@ -327,4 +369,4 @@ </provider> | ||
| <provider selected="true" editor-type-id="text-editor"> | ||
| <state relative-caret-position="95"> | ||
| <caret line="5" column="14" lean-forward="true" selection-start-line="5" selection-start-column="14" selection-end-line="5" selection-end-column="14" /> | ||
| <state relative-caret-position="152"> | ||
| <caret line="8" column="11" lean-forward="true" selection-start-line="8" selection-start-column="11" selection-end-line="8" selection-end-column="11" /> | ||
| </state> | ||
@@ -331,0 +373,0 @@ </provider> |
+15
-51
| 'use strict'; | ||
| /** | ||
| * @param {Number} timestamp eg:1551323702241 | ||
| * @param {Number} timeStamp eg:1551323702241 | ||
| * @param {String} formatter eg:yyyy-MM-dd yyyy/MM/dd yyyy-M-d yyyy/M/d yyyy-MM-dd hh:mm:ss | ||
| * */ | ||
| function Timestamp2String(timestamp,formatter) { | ||
| let year=new Date(timestamp).getFullYear(); | ||
| let month=new Date(timestamp).getMonth()+1; | ||
| let day=new Date(timestamp).getDate(); | ||
| let hour=new Date(timestamp).getHours(); | ||
| let minutes=new Date(timestamp).getMinutes(); | ||
| let seconds=new Date(timestamp).getSeconds(); | ||
| let monthFormatter=formatter.match(/[M]{1,2}/g); | ||
| let dateFormatter=formatter.match(/[d]{1,2}/g); | ||
| let hourFormatter=formatter.match(/[h]{1,2}/g); | ||
| let minutesFormatter=formatter.match(/[m]{1,2}/g); | ||
| let secondsFormatter=formatter.match(/[s]{1,2}/g); | ||
| if(monthFormatter && monthFormatter.join("").length===2){ | ||
| month=handleDouble(month) | ||
| } | ||
| if(dateFormatter && dateFormatter.join("").length===2){ | ||
| day=handleDouble(day) | ||
| } | ||
| if(hourFormatter && hourFormatter.join("").length===2){ | ||
| hour=handleDouble(hour) | ||
| } | ||
| if(minutesFormatter && minutesFormatter.join("").length===2){ | ||
| minutes=handleDouble(minutes) | ||
| } | ||
| if(secondsFormatter && secondsFormatter.join("").length===2){ | ||
| seconds=handleDouble(seconds) | ||
| } | ||
| let format=formatter; | ||
| while(/[A-z]+/.test(format)){ | ||
| if(format.match(/(y){1,4}/g)){ | ||
| format=format.replace((format.match(/(y){1,4}/g)).join(""),year); | ||
| function Timestamp2String(timeStamp,formatter){ | ||
| let date=new Date(timeStamp); | ||
| let obj={ | ||
| "y+":date.getFullYear(), | ||
| "M+":date.getMonth()+1, | ||
| "d+":date.getDate(), | ||
| "h+":date.getHours(), | ||
| "m+":date.getMinutes(), | ||
| "s+":date.getSeconds() | ||
| }; | ||
| for(let item in obj){ | ||
| if(new RegExp("("+item+")").test(formatter)){ | ||
| formatter=formatter.replace(RegExp.$1,(RegExp.$1.length>1 ? handleDouble(obj[item]) : obj[item])) | ||
| } | ||
| if(format.match(/(M){1,2}/g)){ | ||
| format=format.replace((format.match(/(M){1,2}/g)).join(""),month); | ||
| } | ||
| if(format.match(/(d){1,2}/g)){ | ||
| format=format.replace((format.match(/(d){1,2}/g)).join(""),day); | ||
| } | ||
| if(format.match(/(h){1,2}/g)){ | ||
| format=format.replace((format.match(/(h){1,2}/g)).join(""),hour); | ||
| } | ||
| if(format.match(/(m){1,2}/g)){ | ||
| format=format.replace((format.match(/(m){1,2}/g)).join(""),minutes); | ||
| } | ||
| if(format.match(/(s){1,2}/g)){ | ||
| format=format.replace((format.match(/(s){1,2}/g)).join(""),seconds); | ||
| } | ||
| } | ||
| return format | ||
| return formatter | ||
| } | ||
| /** | ||
@@ -60,0 +24,0 @@ * @param {Number,String} para |
+1
-1
| { | ||
| "name": "@rickyhuang/timeutil", | ||
| "version": "0.0.2", | ||
| "version": "0.0.3", | ||
| "description": "util library", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
+15
-51
| 'use strict'; | ||
| /** | ||
| * @param {Number} timestamp eg:1551323702241 | ||
| * @param {Number} timeStamp eg:1551323702241 | ||
| * @param {String} formatter eg:yyyy-MM-dd yyyy/MM/dd yyyy-M-d yyyy/M/d yyyy-MM-dd hh:mm:ss | ||
| * */ | ||
| function Timestamp2String(timestamp,formatter) { | ||
| let year=new Date(timestamp).getFullYear(); | ||
| let month=new Date(timestamp).getMonth()+1; | ||
| let day=new Date(timestamp).getDate(); | ||
| let hour=new Date(timestamp).getHours(); | ||
| let minutes=new Date(timestamp).getMinutes(); | ||
| let seconds=new Date(timestamp).getSeconds(); | ||
| let monthFormatter=formatter.match(/[M]{1,2}/g); | ||
| let dateFormatter=formatter.match(/[d]{1,2}/g); | ||
| let hourFormatter=formatter.match(/[h]{1,2}/g); | ||
| let minutesFormatter=formatter.match(/[m]{1,2}/g); | ||
| let secondsFormatter=formatter.match(/[s]{1,2}/g); | ||
| if(monthFormatter && monthFormatter.join("").length===2){ | ||
| month=handleDouble(month) | ||
| } | ||
| if(dateFormatter && dateFormatter.join("").length===2){ | ||
| day=handleDouble(day) | ||
| } | ||
| if(hourFormatter && hourFormatter.join("").length===2){ | ||
| hour=handleDouble(hour) | ||
| } | ||
| if(minutesFormatter && minutesFormatter.join("").length===2){ | ||
| minutes=handleDouble(minutes) | ||
| } | ||
| if(secondsFormatter && secondsFormatter.join("").length===2){ | ||
| seconds=handleDouble(seconds) | ||
| } | ||
| let format=formatter; | ||
| while(/[A-z]+/.test(format)){ | ||
| if(format.match(/(y){1,4}/g)){ | ||
| format=format.replace((format.match(/(y){1,4}/g)).join(""),year); | ||
| function Timestamp2String(timeStamp,formatter){ | ||
| let date=new Date(timeStamp); | ||
| let obj={ | ||
| "y+":date.getFullYear(), | ||
| "M+":date.getMonth()+1, | ||
| "d+":date.getDate(), | ||
| "h+":date.getHours(), | ||
| "m+":date.getMinutes(), | ||
| "s+":date.getSeconds() | ||
| }; | ||
| for(let item in obj){ | ||
| if(new RegExp("("+item+")").test(formatter)){ | ||
| formatter=formatter.replace(RegExp.$1,(RegExp.$1.length>1 ? handleDouble(obj[item]) : obj[item])) | ||
| } | ||
| if(format.match(/(M){1,2}/g)){ | ||
| format=format.replace((format.match(/(M){1,2}/g)).join(""),month); | ||
| } | ||
| if(format.match(/(d){1,2}/g)){ | ||
| format=format.replace((format.match(/(d){1,2}/g)).join(""),day); | ||
| } | ||
| if(format.match(/(h){1,2}/g)){ | ||
| format=format.replace((format.match(/(h){1,2}/g)).join(""),hour); | ||
| } | ||
| if(format.match(/(m){1,2}/g)){ | ||
| format=format.replace((format.match(/(m){1,2}/g)).join(""),minutes); | ||
| } | ||
| if(format.match(/(s){1,2}/g)){ | ||
| format=format.replace((format.match(/(s){1,2}/g)).join(""),seconds); | ||
| } | ||
| } | ||
| return format | ||
| return formatter | ||
| } | ||
| /** | ||
@@ -60,0 +24,0 @@ * @param {Number,String} para |
@@ -1,7 +0,7 @@ | ||
| const Timestamp2String=require("../lib"); | ||
| const Timestamp2String=require("../src/index"); | ||
| describe("util test",()=>{ | ||
| test("result should be 2019-2-28 13:57:35",()=>{ | ||
| expect(Timestamp2String(1551333455538,"yyyy-M-d hh:mm:ss")) | ||
| .toBe("2019-2-28 13:57:35") | ||
| expect(Timestamp2String(1551333455538,"yyyy年M月d日 hh:mm:ss")) | ||
| .toBe("2019年2月28日 13:57:35") | ||
| }) | ||
| }); |
21768
-3.48%68
-49.25%