<p>moment().fromNow() "๋ช‡ ์ดˆ ์ „"</p>

์— ๋งŒ๋“  2012๋…„ 12์›” 06์ผ  ยท  19์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: moment/moment

moment().fromNow()๋Š” "๋ช‡ ์ดˆ ์ „"์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์™œ "์ง€๊ธˆ"์ด ์•„๋‹Œ๊ฐ€์š”?

New Feature

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

moment.langData('en').relativeTime.s = "just now" ์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ ‘๋ฏธ์‚ฌ๊ฐ€ ์žˆ์œผ๋ฉด ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๊ฒฝ์šฐ fromNow ๋ž˜ํ•‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

๋ชจ๋“  19 ๋Œ“๊ธ€

moment.langData('en').relativeTime.s = "just now" ์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ ‘๋ฏธ์‚ฌ๊ฐ€ ์žˆ์œผ๋ฉด ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๊ฒฝ์šฐ fromNow ๋ž˜ํ•‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 1000) { // 1000 milliseconds
        return 'just now';
    }
    return this.fromNow(a);
}

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ํŒ€!

์ฝ”๋“œ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. "๋ช‡ ์ดˆ ์ „"์€ ๊ดœ์ฐฎ์ง€๋งŒ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‹œ๊ณ„๊ฐ€ ๋™๊ธฐํ™”๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์„ ์™„๋ฃŒํ•œ ํ›„ "๋ช‡ ์ดˆ ํ›„"๋ผ๋Š” ๋ฉ”์‹œ์ง€๋„ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ "์ง€๊ธˆ ๋ฐ”๋กœ"๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์—†๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์œ„์˜ ์ฝ”๋“œ๋Š” ํ˜„์žฌ ์‹œ๊ฐ„ ์ „ํ›„ 1์ดˆ์ธ ๊ฒฝ์šฐ "์ง€๊ธˆ ๋ฐ”๋กœ"๋ฅผ ํ‘œ์‹œํ•˜๋ฏ€๋กœ ํ•ด๋‹น ๋ฒ”์œ„๋ฅผ ๋Š˜๋ฆฌ๋ ค๋ฉด ๋ฐ€๋ฆฌ์ดˆ ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

moment.fn.fromNowOrNow = function (a) {
    if (Math.abs(moment().diff(this)) < 25000) { // 25 seconds before or after now
        return 'just now';
    }
    return this.fromNow(a);
}

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณผ๊ฑฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ "๋ช‡ ์ดˆ ํ›„"๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฒ„๊ทธ๋กœ ๋ณด์ด๋Š” ๊ฒƒ์„ ๊ฐ์•ˆํ•  ๋•Œ '์ง€๊ธˆ ๋ง‰'์ด ๊ธฐ๋ณธ ๋™์ž‘์ด ๋˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

'์ง€๊ธˆ ๋ง‰'์ด ๊ธฐ๋ณธ ๋™์ž‘์ด ๋˜๋„๋ก +1ํ•˜์‹ญ์‹œ์˜ค!

์‹œ๊ณ„๊ฐ€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ณ ์น  ๊ณณ์ด ์ˆœ๊ฐ„์˜ ์ธ๊ฐ„ํ™” ๋ฐฉ์‹์ด ์•„๋‹Œ๊ฐ€ ์‹ถ๋‹ค. ๊ทธ๊ฒƒ์˜ ์‹œ๊ฐ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฏธ๋ž˜์˜ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•˜๋„๋ก ์ง€์‹œํ•˜๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

"๋ช‡ ์ดˆ ์ „" ๋ฌธ์ž์—ด์„ "์ง€๊ธˆ ๋ง‰"์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€๋งŒ "๋ช‡ ์ดˆ ํ›„"๋Š” ๊ทธ๋Œ€๋กœ ๋‘๋ ค๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๋ฒˆ์—ญ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ;-)

moment.langData('en').relativeTime.s = "์ ˆ๋Œ€"; ๋‚ด ๋ฌธ์ œ # 555์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํŒ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„ ์ƒ์„ฑ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ๋•Œ ์‹œ๊ณ„๋Š” ๊ฑฐ์˜ ํ•ญ์ƒ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด moment.js์˜ ๋“œ๋ฌธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋ช‡ ์ดˆ์˜ ์—ก์‹ค๋ก  ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ๋“  ๊ทธ ๊ฐ„๊ฒฉ๋ณด๋‹ค ์ž‘์€ ๊ฐ„๊ฒฉ์ด "์ง€๊ธˆ ๋ง‰" ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ๊ธฐ๋Œ€์— ๋งž์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’ 0์€ ํ˜„์žฌ ๋™์ž‘ , 0๋ณด๋‹ค ํฐ ๊ฐ’์€ ๋ธŒ๋ผ์šฐ์ €/์„œ๋ฒ„ ์˜คํ”„์…‹ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ๊ณผ ์‹ธ์šฐ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋‚˜์š”?

๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ "์—ก์‹ค๋ก  ๊ฐ’"์€ ์ข‹์€ ์ƒ๊ฐ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

@ejain ์˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๊ทธ๊ฒƒ์„ ํ‘œ์‹œํ•˜๊ธฐ ์ „์— ์ˆœ๊ฐ„์„ ์ œ๊ณฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฏธ๋ž˜์— ์ˆ˜์ˆ ์ด ์‹ค์ œ๋กœ ๊ฐ€๋Šฅํ•œ์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

var now = moment();
var mom = momentFromServer < now ? now : momentFromServer;
mom.fromNow(); //=> a few seconds ago

์ด๊ฒƒ์ด Moment์˜ ์ผ๋ถ€๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ fromNow() ๋Œ€ํ•œ ๋ถ€์šธ ์ธ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ fromNow๊ฐ€ fromNow({withSuffix: false, forcePast: true}) ์™€ ๊ฐ™์€ (์—ญํ˜ธํ™˜) ์˜ต์…˜ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@icambron : ์œ ํšจํ•œ ๋ฏธ๋ž˜ ์ˆœ๊ฐ„์ด ์—†๋‹ค๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

@timrwood ์กฐ์–ธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๊ต์ฒดํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” moment.langData('en')._relativeTime.s = "just now" ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ ์งœ(์‹œ๊ฐ„ ์ •๋ณด ์—†์ด)๋ฅผ ์ธ๊ฐ„ํ™”ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ _relativeTime.s๋ฅผ ๋ชจ๋“  ๋กœ์ผ€์ผ์— ๋Œ€ํ•ด "์˜ค๋Š˜"์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋‚ด ์†”๋ฃจ์…˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

fromNow(true)๋Š” "2๋ถ„ ์ „", "2์‹œ๊ฐ„ ์ „", "๋ช‡ ์ดˆ ์ „"์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
"2m" ๋˜๋Š” "2h" ๋˜๋Š” "2s" ๋˜๋Š” "2d"์™€ ๊ฐ™์€ ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@puneet94 https://momentjs.com/docs/#/customization/relative -time/์œผ๋กœ ๋กœ์ผ€์ผ ๋ฌธ์ž์—ด์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

FWIW, past ๋Œ€ํ•œ ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•˜์—ฌ 2.12.0์„ ์‚ฌ์šฉํ•˜์—ฌ "์ง€๊ธˆ ๋ง‰"์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

moment.updateLocale('en', {
    relativeTime : {
        past: function(input) {
          return input === 'just now'
            ? input
            : input + ' ago'
        },
        s  : 'just now',
        future: "in %s",
        ss : '%d seconds',
        m:  "a minute",
        mm: "%d minutes",
        h:  "an hour",
        hh: "%d hours",
        d:  "a day",
        dd: "%d days",
        M:  "a month",
        MM: "%d months",
        y:  "a year",
        yy: "%d years"
    }
});

@richardszalay ์–ด๋–ค ๋‚ ์งœ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•ฉ๋‹ˆ๊นŒ?
๋‚ ์งœ ๋ฌธ์ž์—ด ์‹œ๊ฐ„ = 1560955417474๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ…์ŠคํŠธ ํƒœ๊ทธ ๋‚ด์— ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
<Text>{time}</Text>

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰