js
- 이달 마지막날: ( d=> new Date(d.getFullYear(), d.getMonth()+1, 0) ) (new Date()) 날짜자리에 0,음수사용가능 2024.03.25
- 이달 첫날: ( d=> new Date(d.getFullYear(), d.getMonth(), 1) ) (new Date()) 2024.03.25
- n일 전/후: new Date( new Date().getTime() ± 1000*60*60*24*n ) 2024.03.25
- [다중정렬]data.sort((a, b) => a.price - b.price || a.name.localeCompare(b.name)); 2024.03.22
- package.json 2024.02.23
- n분 전,n시간 전, n일 전, n주 전, n개월 전, n년 전 - js구현방법 2024.02.16
- inputMask(_._._._이런거) 참고자료 <input> 자체지원은 안됨 2024.02.07
- {...{id:1,value:일},id:2} ->젤 뒤에 오는 2가 앞의 1을 덮어버림, 앞에 위치한 값은 없어짐 2024.02.07
- 1->01: (1+'').padStart(2,'0'), (1).toLocaleString('en-US',{minimumIntegerDigits:2}) 2024.01.31
- 숫자(1000)를 1,000형태로: Intl.NumberFormat().format(숫자,문자열)-결과는 문자열 2024.01.31
이달 마지막날: ( d=> new Date(d.getFullYear(), d.getMonth()+1, 0) ) (new Date()) 날짜자리에 0,음수사용가능
2024. 3. 25. 16:37 [js/js date]
반응형
반응형
이달 첫날: ( d=> new Date(d.getFullYear(), d.getMonth(), 1) ) (new Date())
2024. 3. 25. 16:35 [js/js date]
반응형
반응형
'js > js date' 카테고리의 다른 글
n일 전/후: new Date( new Date().getTime() ± 1000*60*60*24*n )
2024. 3. 25. 15:59 [js/js date]
반응형
- new Date(new Date().getTime() ± 1000*60*60*24*n) = new Date(new Date().valueOf() ± 1000*60*60*24*n)
- ( d => new Date(d.setDate(d.getDate() - 1)) ) (new Date())
반응형
'js > js date' 카테고리의 다른 글
[다중정렬]data.sort((a, b) => a.price - b.price || a.name.localeCompare(b.name));
2024. 3. 22. 17:16 [js/js syntax]
반응형
data.sort((a, b) => a.price - b.price || a.name.localeCompare(b.name)); // 가격이 낮은 순으로 정렬하고, 가격이 같으면 이름순으로 정렬
반응형
'js > js syntax' 카테고리의 다른 글
package.json
2024. 2. 23. 10:44 [js/node, npm]
반응형
csPortal: react-scripts -> webpack
{
"name": "asc_portal",
"version": "0.1.0",
"private": true,
"scripts": {
"start:webapp:local": "curl -X POST localhost:8090/language/login > src/language-login.json | npx --max_old_space_size=8192 webpack serve --mode development --env PRODUCT=portal TITLE=\"# LOCAL\" --config webpack.localhost.js",
"build:webapp:development": "curl -X POST https://gcsportaltest.lge.com/api/language/login > src/language-login.json | npx webpack --mode development --env PRODUCT=portal TITLE=\"DEV.WORLD\" --config webpack.development.js",
"build:webapp:production": "curl -X POST https://csportaltest.lge.com/api/language/login > src/language-login.json | npx webpack --mode production --env PRODUCT=portal TITLE=\"LG CS Portal\" --config webpack.production.js",
"start": "react-scripts start",
"build": "npx webpack --mode production --env PRODUCT=portal TITLE=\"LG CS Portal\" --config webpack.production.js",
"build:dev": "env-cmd -f .env.test react-scripts build",
"build:2nd": "env-cmd -f .env.test.2nd react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"dependencies": {
"@ag-grid-community/core": "^30.0.2",
"@ag-grid-community/react": "^30.0.2",
"@ag-grid-community/styles": "^30.0.2",
"@ckeditor/ckeditor5-build-classic": "^38.0.0",
"@ckeditor/ckeditor5-react": "^7.0.0",
"@ckpro/ckeditor5-upload-adapter": "^2.0.1",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"ag-grid-community": "^30.0.6",
"ag-grid-react": "^30.0.2",
"axios": "^0.21.2",
"bootstrap": "^5.3.1",
"buffer": "^6.0.3",
"chart.js": "^4.3.0",
"chartjs-plugin-datalabels": "^2.2.0",
"crypto-js": "^4.1.1",
"date-fns": "^2.30.0",
"dotenv": "^16.0.3",
"env-cmd": "^10.1.0",
"http-proxy-middleware": "^2.0.6",
"i18next": "^22.5.1",
"jquery": "^3.7.0",
"js-logger": "^1.6.1",
"json-beautify": "^1.1.1",
"jwt-decode": "^3.1.2",
"mobx": "^6.12.0",
"mobx-react": "^9.1.1",
"moment": "^2.29.4",
"node-html-parser": "^6.1.12",
"numeral": "^2.0.6",
"query-string": "^9.0.0",
"react": "^18.2.0",
"react-bootstrap": "^2.8.0",
"react-chartjs-2": "^5.2.0",
"react-csv": "^2.2.2",
"react-datepicker": "^4.14.0",
"react-dom": "^18.2.0",
"react-drag-list": "^1.1.0",
"react-dropzone": "^14.2.3",
"react-helmet": "^6.1.0",
"react-hook-form": "^7.46.1",
"react-i18next": "^12.3.1",
"react-js-pagination": "^3.0.3",
"react-quick-pinch-zoom": "^5.1.0",
"react-responsive": "^9.0.2",
"react-router-dom": "^6.11.1",
"react-scripts": "5.0.1",
"react-select": "^5.7.3",
"react-slick": "^0.29.0",
"react-zendesk": "^0.1.13",
"read-excel-file": "^5.6.1",
"slick-carousel": "^1.8.1",
"styled-components": "^6.0.0-rc.3",
"web-vitals": "^2.1.4"
},
"devDependencies": {
"@babel/plugin-transform-react-jsx": "^7.23.4",
"@svgr/webpack": "^8.1.0",
"@webpack-cli/serve": "^2.0.5",
"css-loader": "^6.11.0",
"dotenv-webpack": "^8.1.0",
"file-loader": "^6.2.0",
"html-loader": "^5.0.0",
"html-webpack-plugin": "^5.6.0",
"msw": "^2.2.13",
"prettier": "^3.2.5",
"resolve-url-loader": "^5.0.0",
"sass": "^1.74.1",
"sass-loader": "^14.1.1",
"style-loader": "^3.3.4",
"svg-url-loader": "^8.0.0",
"webpack": "^5.91.0",
"webpack-bundle-analyzer": "^4.10.2",
"webpack-cli": "^5.1.4",
"webpack-merge": "^5.10.0"
},
"msw": {
"workerDirectory": [
"public"
]
},
"babel": {
"plugins": [
"@babel/plugin-transform-react-jsx"
]
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"build:dev": "env-cmd -f .env.test react-scripts build",
"build:2nd": "env-cmd -f .env.test.2nd react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
farmOS: react-app-rewired
"scripts": {
"start": "set PORT=3007 && react-app-rewired start",
"build": "react-app-rewired --max-old-space-size=32768 build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
반응형
'js > node, npm' 카테고리의 다른 글
npm (0) | 2022.07.21 |
---|---|
nodejs를 이용한 mock server 구성 (0) | 2022.06.14 |
n분 전,n시간 전, n일 전, n주 전, n개월 전, n년 전 - js구현방법
2024. 2. 16. 15:57 [js/js date]
반응형
export const getTimeString = (time) => {
const milliSeconds = new Date() - time;
const seconds = milliSeconds / 1000;
if (seconds < 60) return `방금 전`;
const minutes = seconds / 60;
if (minutes < 60) return `${Math.floor(minutes)}분 전`;
const hours = minutes / 60;
if (hours < 24) return `${Math.floor(hours)}시간 전`;
return time?.toLocaleString();
const days = hours / 24;
if (days < 7) return `${Math.floor(days)}일 전`;
const weeks = days / 7;
if (weeks < 5) return `${Math.floor(weeks)}주 전`;
const months = days / 30;
if (months < 12) return `${Math.floor(months)}개월 전`;
const years = days / 365;
return `${Math.floor(years)}년 전`;
}
반응형
'js > js date' 카테고리의 다른 글
inputMask(_._._._이런거) 참고자료 <input> 자체지원은 안됨
2024. 2. 7. 16:24 [js]
반응형
https://codepen.io/vitaly-zdanevich/pen/MaEJga
<form>
<input id="phone"
type="tel"
name="phone"
value="+375 (__) ___-__-__"
pattern="^\+375 \((17|29|33|44)\) [0-9]{3}-[0-9]{2}-[0-9]{2}$"
required>
<button>Push</button>
</form>
// angelwatt.com/coding/masked_input.php
window.onload = function() {
MaskedInput({
elm: document.getElementById('phone'),
format: '+375 (__) ___-__-__',
separator: '+375 ()-'
});
};
// masked_input_1.4-min.js
(function(a){a.MaskedInput=function(f){if(!f||!f.elm||!f.format){return null}if(!(this instanceof a.MaskedInput)){return new a.MaskedInput(f)}var o=this,d=f.elm,s=f.format,i=f.allowed||"0123456789",h=f.allowedfx||function(){return true},p=f.separator||"/:-",n=f.typeon||"_YMDhms",c=f.onbadkey||function(){},q=f.onfilled||function(){},w=f.badkeywait||0,A=f.hasOwnProperty("preserve")?!!f.preserve:true,l=true,y=false,t=s,j=(function(){if(window.addEventListener){return function(E,C,D,B){E.addEventListener(C,D,(B===undefined)?false:B)}}if(window.attachEvent){return function(D,B,C){D.attachEvent("on"+B,C)}}return function(D,B,C){D["on"+B]=C}}()),u=function(){for(var B=d.value.length-1;B>=0;B--){for(var D=0,C=n.length;D<C;D++){if(d.value[B]===n[D]){return false}}}return true},x=function(C){try{C.focus();if(C.selectionStart>=0){return C.selectionStart}if(document.selection){var B=document.selection.createRange();return -B.moveStart("character",-C.value.length)}return -1}catch(D){return -1}},b=function(C,E){try{if(C.selectionStart){C.focus();C.setSelectionRange(E,E)}else{if(C.createTextRange){var B=C.createTextRange();B.move("character",E);B.select()}}}catch(D){return false}return true},m=function(D){D=D||window.event;var C="",E=D.which,B=D.type;if(E===undefined||E===null){E=D.keyCode}if(E===undefined||E===null){return""}switch(E){case 8:C="bksp";break;case 46:C=(B==="keydown")?"del":".";break;case 16:C="shift";break;case 0:case 9:case 13:C="etc";break;case 37:case 38:case 39:case 40:C=(!D.shiftKey&&(D.charCode!==39&&D.charCode!==undefined))?"etc":String.fromCharCode(E);break;default:C=String.fromCharCode(E);break}return C},v=function(B,C){if(B.preventDefault){B.preventDefault()}B.returnValue=C||false},k=function(B){var D=x(d),F=d.value,E="",C=true;switch(C){case (i.indexOf(B)!==-1):D=D+1;if(D>s.length){return false}while(p.indexOf(F.charAt(D-1))!==-1&&D<=s.length){D=D+1}if(!h(B,D)){c(B);return false}E=F.substr(0,D-1)+B+F.substr(D);if(i.indexOf(F.charAt(D))===-1&&n.indexOf(F.charAt(D))===-1){D=D+1}break;case (B==="bksp"):D=D-1;if(D<0){return false}while(i.indexOf(F.charAt(D))===-1&&n.indexOf(F.charAt(D))===-1&&D>1){D=D-1}E=F.substr(0,D)+s.substr(D,1)+F.substr(D+1);break;case (B==="del"):if(D>=F.length){return false}while(p.indexOf(F.charAt(D))!==-1&&F.charAt(D)!==""){D=D+1}E=F.substr(0,D)+s.substr(D,1)+F.substr(D+1);D=D+1;break;case (B==="etc"):return true;default:return false}d.value="";d.value=E;b(d,D);return false},g=function(B){if(i.indexOf(B)===-1&&B!=="bksp"&&B!=="del"&&B!=="etc"){var C=x(d);y=true;c(B);setTimeout(function(){y=false;b(d,C)},w);return false}return true},z=function(C){if(!l){return true}C=C||event;if(y){v(C);return false}var B=m(C);if((C.metaKey||C.ctrlKey)&&(B==="X"||B==="V")){v(C);return false}if(C.metaKey||C.ctrlKey){return true}if(d.value===""){d.value=s;b(d,0)}if(B==="bksp"||B==="del"){k(B);v(C);return false}return true},e=function(C){if(!l){return true}C=C||event;if(y){v(C);return false}var B=m(C);if(B==="etc"||C.metaKey||C.ctrlKey||C.altKey){return true}if(B!=="bksp"&&B!=="del"&&B!=="shift"){if(!g(B)){v(C);return false}if(k(B)){if(u()){q()}v(C,true);return true}if(u()){q()}v(C);return false}return false},r=function(){if(!d.tagName||(d.tagName.toUpperCase()!=="INPUT"&&d.tagName.toUpperCase()!=="TEXTAREA")){return null}if(!A||d.value===""){d.value=s}j(d,"keydown",function(B){z(B)});j(d,"keypress",function(B){e(B)});j(d,"focus",function(){t=d.value});j(d,"blur",function(){if(d.value!==t&&d.onchange){d.onchange()}});return o};o.resetField=function(){d.value=s};o.setAllowed=function(B){i=B;o.resetField()};o.setFormat=function(B){s=B;o.resetField()};o.setSeparator=function(B){p=B;o.resetField()};o.setTypeon=function(B){n=B;o.resetField()};o.setEnabled=function(B){l=B};return r()}}(window));
https://codepen.io/_marcba/pen/JjXRNbV
<label>IP Address</label>
<input type="text" class="form-input" id="ipv4" name="ipv4" placeholder="xxx.xxx.xxx.xxx"/>
//input mask bundle ip address
var ipv4_address = $('#ipv4');
ipv4_address.inputmask({
alias: "ip",
greedy: false //The initial mask shown will be "" instead of "-____".
});
반응형
'js' 카테고리의 다른 글
숫자(1000)를 1,000형태로: Intl.NumberFormat().format(숫자,문자열)-결과는 문자열 (0) | 2024.01.31 |
---|---|
Difference between fetch, ajax, and xhr (0) | 2024.01.19 |
.childNodes와 .children의 차이: .childNodes.forEach만 가능 (0) | 2024.01.11 |
import 경로에 JS파일이 아닌 디렉토리를 입력하면 index.js를 우선적으로 찾음 (0) | 2024.01.11 |
regular expression (2) | 2023.11.08 |
{...{id:1,value:일},id:2} ->젤 뒤에 오는 2가 앞의 1을 덮어버림, 앞에 위치한 값은 없어짐
2024. 2. 7. 15:53 [js/js syntax]
반응형
{...{id:1,value:일},id:2} ->뒤에 오는 2를 사용함, 앞에 위치한 값은 없어짐
뒤가 중요
반응형
'js > js syntax' 카테고리의 다른 글
[numberCheck] /^\d+$/.test(확인대상-문자열, 문자열아니면 문자열로 자동변환) Number.isInteger(확인대상-숫자, 그중에서도 정수만 true 1.0도 true) (0) | 2024.04.01 |
---|---|
[다중정렬]data.sort((a, b) => a.price - b.price || a.name.localeCompare(b.name)); (0) | 2024.03.22 |
1->01: (1+'').padStart(2,'0'), (1).toLocaleString('en-US',{minimumIntegerDigits:2}) (0) | 2024.01.31 |
javascript true/false (0) | 2022.08.31 |
js reduce function (0) | 2022.08.22 |
1->01: (1+'').padStart(2,'0'), (1).toLocaleString('en-US',{minimumIntegerDigits:2})
2024. 1. 31. 15:45 [js/js syntax]
반응형
(1+'').padStart(2,'0')
(1).toLocaleString('en-US',{minimumIntegerDigits:2}) 동작함
1.toLocaleString('en-US',{minimumIntegerDigits:2}) 에러남
How to format numbers by prepending 0 to single-digit numbers?
I want to format a number to have two digits. The problem is caused when 0–9 is passed, so I need it to be formatted to 00–09. Is there a number formatter in JavaScript?
stackoverflow.com
반응형
'js > js syntax' 카테고리의 다른 글
[다중정렬]data.sort((a, b) => a.price - b.price || a.name.localeCompare(b.name)); (0) | 2024.03.22 |
---|---|
{...{id:1,value:일},id:2} ->젤 뒤에 오는 2가 앞의 1을 덮어버림, 앞에 위치한 값은 없어짐 (0) | 2024.02.07 |
javascript true/false (0) | 2022.08.31 |
js reduce function (0) | 2022.08.22 |
js empty array check: arr?.length===0 (객체이면 arr.length는 undefined) (0) | 2022.07.11 |
숫자(1000)를 1,000형태로: Intl.NumberFormat().format(숫자,문자열)-결과는 문자열
2024. 1. 31. 15:35 [js]
반응형
Intl.NumberFormat().format(n.cost)
function numberWithCommas(str) {
// console.log(str)
// 주어진 문자열이 숫자로만 구성되어 있는지 확인합니다.
const isNumeric = /^\d+$/.test(str);
// 숫자로만 구성되어 있을 경우에만 변환합니다.
if (isNumeric) {
// 숫자의 길이를 구합니다.
const length = str.length;
// 숫자의 길이가 4 이상이면, 통화 구분 기호를 넣습니다.
if (length >= 4) {
return str.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
// 숫자의 길이가 4 미만이면, 통화 구분 기호를 넣지 않습니다.
return str;
}
// 숫자로만 구성되어 있지 않으면 그대로 반환합니다.
return str;
}
반응형
'js' 카테고리의 다른 글
inputMask(_._._._이런거) 참고자료 <input> 자체지원은 안됨 (0) | 2024.02.07 |
---|---|
Difference between fetch, ajax, and xhr (0) | 2024.01.19 |
.childNodes와 .children의 차이: .childNodes.forEach만 가능 (0) | 2024.01.11 |
import 경로에 JS파일이 아닌 디렉토리를 입력하면 index.js를 우선적으로 찾음 (0) | 2024.01.11 |
regular expression (2) | 2023.11.08 |