ããã«ã€ããŠã¯å€ãã®è°è«ããããŸããã ææ¡ã¯æ¬¡ã®ãšããã§ãã
次ã®å¯å€ã¡ãœããã¯3.0.0ã§äžå€ã«ãªããŸãïŒ utc
ã local
ã zone
ã add
ã subtract
ã startOf
ã endOf
ã lang
ããããduration
ïŒ add
ã subtract
ãããã³lang
ã
ãŸãããã¹ãŠã®ã¡ãœãããmethodNameMute
ããªã¢ã³ãã§è€è£œãããŸãã methodNameImmute
ãšããååã®äžå€ã®ããªã¢ã³ããå¿
èŠã§ãã 3.0以éãåŸæ¥ã®ã¡ãœããã¯ããã©ã«ãã§äžå€ãªãã·ã§ã³ã®äœ¿çšãéå§ããŸãã
è°è«ã®äœå°ãããã®ã¯ïŒ
lang
ãäžå€ã«ããå¿
èŠããããŸãget
/ set
ïŒãäžå€ã«ããå¿
èŠããããŸãè¯ãéšåã¯ãä»æ¥ã¡ãœããã®äžå€ããŒãžã§ã³ãäœæããåŸã§äœããããã決å®ã§ããããšã§ãã åãæ¿ãããšã 3.x
ãåºãŠãããããªãé·ãé2.x
ãã©ã³ããååšããããšã«ããªããŸãã
@icambron @timrwood @gregwebs @yang @lfnavess @soswow @langalex
ç§ã®2ã»ã³ãã¯ãå®å
šãªäžå€æ§ãæ¡çšãããããŸã£ããæ¡çšããªããã®ã©ã¡ããã§ãããšããããšã§ãã äžå€ã®ã¡ãœããïŒ startOf
ã add
ïŒãšããã§ãªãã¡ãœããïŒ year
ã get
ïŒããããšæ··ä¹±ããã ãã§ãéçºè
ã¯è¿œè·¡ããå¿
èŠããããŸããã©ããã©ããã
ãŸããããã©ã«ãã§äžå€ã®ãã¹ãŠãåªå ããŸãã ã²ãã¿ãŒã¯ãã§ã«äžå€ã§ã¯ãããŸãããïŒ
äžå€æ§ãžã®åãæ¿ãã§ç§ãç®ã«ãã倧ããªåé¡ã¯æ¬¡ã®ãšããã§ãã
javascriptã®æ§è³ªäžãçã®äžå€æ§ãæã€ããšã¯ã§ããŸããã
ç§ãã¡ãã§ããæåã®ããšã¯ãã³ããŒãäœæããŠããããã®ã³ããŒãå€æŽããŠè¿ãããšã§ãã ãã¹ãŠã®ãããªãã¯ã¡ãœãããæ
éã«ã©ããããŠãåã«å€æŽããã®ã§ã¯ãªããåžžã«ã³ããŒããŠå€æŽããããã«ããããšãã§ããŸãããããã§ã誰ããm._d = new Date()
ãŸãã¯m._d.setHours(1)
ãå®è¡ããã®ã劚ããããšã¯ãããŸããã
@icambronã«åæããŸããäžå€æ§ã«ç§»è¡ãããšãå®å šãªå€æŽã«ãªãã¯ãã§ãã ããç¬éã«ããããã£ãå€æŽããå¯èœæ§ã®ããã¡ãœããã¯ã代ããã«ãã®ç¬éã®ã³ããŒãäœæãã代ããã«ãã®ã³ããŒã«å€æŽãå ããŸãã
ç䌌äžå€æ§ãžã®åãæ¿ãã«é¢ããäžå¹žãªç¹ã¯ãå¯å€æ§ãåŒãç¶ããµããŒãããå Žåã¯ãå€ãã®æ°ããAPIãäœæããå¿ èŠãããããšã§ãã
以åã¯ãã¢ãŒã¡ã³ãã®å€æŽããã¯ããŒã³äœæãšã¢ãŒã¡ã³ãã®å€æŽãžã®åãæ¿ãã¯ãé©åãªå Žæã«.clone()
ãè¿œå ããã®ãšåããããç°¡å
ããã«ã¯ãæ倧20ã®ã»ãã¿ãŒã¡ãœãããadd / extractãlocal / utc / zone / tzãstartOf / endOfãlangãããã³ãµãŒãããŒãã£ã®ãã©ã°ã€ã³ã§äœ¿çšããããã®ä»ã®ã¡ãœãããå«ãŸããŸãã
çŸåšãå€ãå€æŽãããã³ã«ã³ããŒãäœæããŠãããããã¡ã¢ãªäœ¿çšéãå¢å ããŸãã ãã¡ãããæ°ããç¬éã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãããŸããããã®å€æŽã«é¢é£ããè¿œå ã³ã¹ãã¯èŠããŠããå¿ èŠããããŸãã
ä»ã®ã»ãã¿ãŒã䜿çšããæ¹æ³ã§å€§éã®äœ¿ãæšãŠã¯ããŒã³ãäœæããªãããã«çŽ°å¿ã®æ³šæãæãå¿ èŠããããŸãã
åŒã³åºãããŠããã¡ãœããã远跡ããããã«ããã®å°ããªé¢æ°ã©ãããŒã䜿çšããŸããã
for (var method in moment.fn) {
moment.fn[method] = (function (fn, method) {
return function () {
console.log(method);
return fn.apply(this, arguments)
}
})(moment.fn[method], method)
}
ããã§ãã¡ãœãããå®è¡ãããšããããã¿ã€ãã®ä»ã®ã¡ãœãããã©ã®ããã«äœ¿çšããããã確èªã§ããŸãã ãããã®ã¡ãœããã®ãã¹ãŠããã®ç¬éã«ã¯ããŒã³ãäœæããå¿ èŠãããããã§ã¯ãªãã®ã§ãã¯ããŒã³ãäœæããå¿ èŠãããã¡ãœããã«ã€ããŠã³ã¡ã³ããè¿œå ããŸããã
moment().isSame(moment(), 'year')
isSame
clone // clone
startOf // clone
month // clone
date // clone
year // clone
date // clone
hours // clone
minutes // clone
seconds // clone
milliseconds // clone
valueOf
local // clone
zone // clone
startOf // clone
month // clone
date // clone
year // clone
date // clone
hours // clone
minutes // clone
seconds // clone
milliseconds // clone
valueOf
ããã¯ãäœæãããŠããã«ç Žæ£ããã21åã®ã³ããŒã§ãã æããã«ãå€æŽå¯èœã§äžå€ããŒãžã§ã³ã®ã¿ãå ¬éããããã€ãã®å éšã¡ãœããã䜿çšããŠãããæé©åã§ããŸãããã¯ããŒã³äœæãå¿ èŠãªç¬éãšäžèŠãªç¬éã®èšé²ãä¿æããããšãããšãå éšã®è€éããå€§å¹ ã«å¢ããŸãã
ã¢ãŒã¡ã³ãã®ã¯ããŒã³äœæã¯ãã¢ãŒã¡ã³ãã®å€æŽãããã¯ããã«é ããªããŸãã ç§ã¯ããã®ããã«ããã€ãã®jsperfãã¹ããäžç·ã«æããŸããã
http://jsperf.com/moment-cloning
http://jsperf.com/moment-cloning-2
2çªç®ã®ãã¹ãã¯ãç䌌äžå€æ§ã«åãæ¿ãããšãã®ããã©ãŒãã³ã¹ã®äœäžãããé©åã«è¡šçŸããŠãããšæããŸãã ãããã®çµæã«äžèšã®21ã®ã¯ããŒã³äœæã€ã³ã¹ã¿ã³ã¹ãæãããšãå®è¡æéã¯ã¯ããã«é ããªããŸãã
ã¯ããŒã³äœæã®ãã¹ãæé©åã§ãããšç¢ºä¿¡ããŠããŸãããåçã®ããã©ãŒãã³ã¹ãåŸãã«ã¯ããã¹ã50åé«éåããå¿ èŠããããŸãã ããã¯äžå¯èœã ãšç¢ºä¿¡ããŠããŸãã
äžå€æ§ã«åãæ¿ãããšãå éšAPIãšå€éšAPIã®è€éããå€§å¹ ã«å¢ããããã©ãŒãã³ã¹ãšã¡ã¢ãªã«å€§ããªæžå¿µãçããŸãã ãããã®ã³ã¹ãã¯ãäžå€æ§ãããããã¡ãªããã«èŠåã䟡å€ã¯ãªããšæããŸãã
ããã«ãªã¹ããããŠããããã©ãŒãã³ã¹ã®æžå¿µã¯ããã€ã³ããæ¬ ããŠãããšæããŸãã
äžè¬çã«ããã¥ãŒããŒã·ã§ã³ãå®è¡ããåã«æ£ç¢ºæ§ã確ä¿ããã«ã¯ãæåã®.cloneïŒïŒãå¿ èŠã§ãã
çŸåšã®APIã§ã¯cloneïŒïŒãå¿ èŠãªãããã«èŠããããããšã¯ã§ããŸããã ããã§ç°ãªãäž»ãªã±ãŒã¹ã¯ãè€æ°ã®ã·ãŒã±ã³ã·ã£ã«ãã¥ãŒããŒã·ã§ã³ãå®è¡ããããšã§ãã ãã®ã±ãŒã¹ã¯ããã¹ãŠã®ãã¥ãŒããŒã·ã§ã³ãåäžã®ã¯ããŒã³ã§ãã¥ãŒããŒã·ã§ã³ãšããŠå®è¡ãããããã«ãã«ããŒAPIãäœæããããšã§å¯ŸåŠãããŸãã
ä»ã®äžè¬çãªãŠãŒã¹ã±ãŒã¹ããããŸãããïŒ
ç§ã®æåã®åé¡ã¯ãå
·äœçã«ã¯startOf
ãšendOf
ã¡ãœããã«é¢ãããã®ã§ããã ã©ãããããããç§ã«ãšã£ãŠãããã®ååã¯ãããã®ç¬éãæã®éå§ã«èšå®ãããã§ã¯ãªãããæã®éå§ãååŸãããã®ãããªãã®ã§ããã add
ãsubtract
ãããªã¡ãœããã¯ãã»ãã³ãã£ã¯ã¹ã®æå³ã§å®å
šã«åé¡ãããŸããã æ°ãããªããžã§ã¯ããäœæããã«ãªããžã§ã¯ãã«äœããè¿œå ããããšã¯ãŸã£ããåé¡ãããŸããã
ç§ã«ãšã£ãŠãã¡ãœããã®ååãstartOf
ãšendOf
ã«å€æŽããŠã toStartOf
ãštoEndOf
ããã«ïŒããã®ç¬éãæã®åãã«ç§»åãããã®ããã«ïŒè§£æ±ºããŸããåé¡ã ç§èŠã§ã¯
@gregwebsç³ãèš³ãããŸããããäžèšã®set
ãæå³ããŸãã
@soswowã«åæããŸããã äžè²«ããŠããå¿
èŠããããšæããŸãã å®éã toStartOf
ã¯ã toISOString
代æ¿ãã¬ãŒã³ããŒã·ã§ã³ãæäŸããããã«ãäžå€æ§ãããã«åŒ·ãæå³ãããšæããŸãã ããã«éèŠãªããšã¯ãããããã®ã¡ãœããã§ã¯ãã¢ãŒã¡ã³ãã»ãã¿ãŒãã¢ãŒã¡ã³ããå€æŽãããããã¢ãŒã¡ã³ãã»ãã¿ãŒãã³ããŒãè¿ãããªã©ã®ã¹ããŒãã¡ã³ããäœæã§ããå¿
èŠããããšæããŸãã
@timrwoodã®æžå¿µã«ã€ããŠïŒ
JSãªããžã§ã¯ããæ¬åœã«äžå€ã§ã¯ãªããšããããšã¯ç§ãæ©ãŸããŸããã éèŠãªã®ã¯ãAPIãäžå€ã®ã³ã³ãã©ã¯ããæäŸãããšããããšã§ãã ãã¡ããããŠãŒã¶ãŒã¯äžç·ãåŒãããããããã£ããããããšã§äžæ£è¡çºãè¡ãããšãã§ããŸããäžæ£è¡çºã¯ãäžå€æ§ãäž»ãªæ¹æ³ã§ããèšèªã§ãäžè¬çã«å¯èœã§ãã
è¡šé¢ç©ãšããã©ãŒãã³ã¹ã«ã€ããŠïŒCPUãšã¡ã¢ãªããã¹ãŠäœ¿ãæããããšãé¿ããããã«å
éšã§ãã¥ãŒããŒã¿ã䜿çšããå¿
èŠããããšæããŸã[1]ããã®ãããããçšåºŠã®ã¬ãã«ã§ãããããµããŒãããå¿
èŠããããŸãã 次ã«ã setYear()
ãªã©ã®ããã«ãããããå€éšã«å
¬éããããšãã§ããŸããããã«ããã倧éã®è¡šé¢ç©ãè¿œå ãããŸãããå®éã«ã¯ããã»ã©è€éã«ã¯ãªããŸããã éæ瀺çãã¥ãŒããŒã¿ãŒã®å Žåã¯ãå€éšã§ã¯ããŒã³ãäœæããå
éšã§å€æŽããŸãã
ããã確èªãã1ã€ã®æ¹æ³ã¯ããŠãŒã¶ãŒãã³ãŒãã®ã¯ããŒã³ãäœæããå¿ èŠããããããMomentããŠãŒã¶ãŒã®ããã«è¡ã£ãŠããå¯èœæ§ããããšããããšã§ãã ããã¯ãããã©ãŒãã³ã¹ã«ææãªå Žæã§ã®ãã§ãŒã³ã«é¢ããåé¡ãæ瀺ããŸããããã¯ããã«ããŒã€ã³ã¿ãŒãã§ã€ã¹ïŒGregã®ã¢ã€ãã¢ã«ããïŒãŸãã¯ãŠãŒã¶ãŒã«ãã¥ãŒããŒã¿ãŒã䜿çšãããããšã«ãã£ãŠæŠãããšãã§ããŸãã ãã«ããŒã¯å€ãã®è€éããè¿œå ããŸã[2]ã®ã§ãç§ã¯æ瀺çãªãã¥ãŒããŒã¿ãŒã®ä»£æ¿æ¡ã奜ããšæããŸãã çŸå®ã«ã¯ãã»ãšãã©ã®å ŽåãMomentã¯ããã©ãŒãã³ã¹ã«ææãªç¶æ³ã§ã¯äœ¿çšãããŠããªããããAPIã«é¢ããŠæã䟿å©ãªç¶æ³ã§ããå¿ èŠã¯ãããŸããã å¿ èŠãªãšãã«åããŠãããã©ãŒãã³ã¹ããããåããäžå€ã®APIã欲ããã§ãã
[1] FPã©ã³ãã®ãã£ãããåäŸãã¡ã¯ãããã_æ§é å ±æ_ã§è§£æ±ºããŸãããããã§ã¯ããããéçŸå®çã§ãã
[2]äŒçµ±çã«ã人ã
ã¯å¥ã
ã®ãªããžã§ã¯ãã§ãããã«ããŒãäœæããŸãããã»ãã¿ãŒAPIå
šäœãã³ããŒããå¿
èŠããããããããã§ã¯éåžžã«åé·ã«ãªããŸãã ãã åŸãåãã ãã§ããã1ã€ã®éžæè¢ã¯ã .chain()
ãisBuilding
ãã©ã°ãèšå®ãããã¯ããŒã³ã¢ãŒã¡ã³ããäœæããããšã§ãã 次ã«ãå
éšã¯ããŒã³ã¯ç¡èŠããããã¥ãŒããŒã·ã§ã³ã®ãªããžã§ã¯ããè¿ãããŸãã 次ã«ã build()
ã¯ãã©ã°ã®èšå®ã解é€ãããã®ã¯ããŒã³ãè¿ããŸãã åé¡ã¯ããã©ã°ãèšå®ãããŠããå Žåãã²ãã¿ãŒãè¡ãŸã¿ãã®æ®ºäººãå«ã¶å¿
èŠãããããšã§ããããããªããšã人ã
ã¯ãçªç¶å€ç°ããé£éããŠãããæ§ç¯ãããŠããªãã¢ãŒã¡ã³ãã䜿çšããããšã«ãªããŸãã 次ã«ãå€éšãšå
éšã§åŒã°ããã²ãã¿ãŒãåºå¥ããå¿
èŠããããŸãã Blechã ãã1ã€ã®æ¹æ³ã¯ããã«ããŒã«å¿
èŠãªæ©èœãå
éšã§ããã¯ã¹ã€ã³ã«å解ãããã«ããŒãšã¢ãŒã¡ã³ãã®äž¡æ¹ã§äœ¿çšããããšã§ãããã³ãŒãç·šæã®èŠ³ç¹ããã¯ããããæ©èœããŸããã
ç§ãããŸããã£ãã®ã¯ãé¢æ°ã«è¿œå ã®ãã©ã¡ãŒã¿ãŒãè¿œå ããããšã§ããããã©ã°ïŒselfãšããååïŒã¯å¯å€æ§ã瀺ããããã©ã«ãã§ã¯äžå€ïŒã³ããŒãŸãã¯æ°ãããªããžã§ã¯ããè¿ãïŒã§ãããããã©ãŒãã³ã¹ãæ€åºãããšãã©ã°ãtrueã«èšå®ããŸãã
ãã®ç«å Žã¯å€ãã®å¯Ÿç«ã解決ããŸããã
ã»ãŒåãã³ãŒããå®è¡ããåæ§ã®ååã®é¢æ°ãæã£ãŠããã
ãŸãã¯ãããã©ãŒãã³ã¹ãã€ã³ããæ€åºãããšãã«ãé¢æ°åãšãããããã©ã¡ãŒã¿ãå€æŽããå¿
èŠããããŸã
ç§ã®ãããªãã¯ã¡ãœããã§ã¯ãé¢æ°ãåŒã³åºãã³ãŒããã³ããŒã§éå§ãããã©ã°ãtrueã«ããŠåŒã³åºããç¶ããŸã
ããã§ç§ãæ©èœãé£éãããããšãã§ããŸã
ç§ã®ã³ãŒãã§ã¯ãé
åã®é
åïŒããŒãã«ãè¡ã®é
åãªã©ïŒãæäœããŸã
ãã®ããã以åã¯çµæã䜿çšããŠæ°ããé
åãåå®è¡ãããã£ã«ã¿ãŒãçµåãªã©ã®é¢æ°ããããåãé¢æ°ãæ°ååŒã³åºããæçµçµæãååŸããããã«ãæåã®åŒã³åºãã¯ã³ããŒãäœæããããšã§ãããå€æŽããªãããšãæ€åºããŸããæåã®é
åãããã³æ¬¡ã®åŒã³åºãã§ã¯ãå¿
èŠã®ãªãåãé
åããããè¡ã䜿çšããŸã
ããã«ããå¯èœæ§ã®ããåºæ¬çãªäŸïŒ
moment.add = functionïŒmeasureãammountãselfïŒ{
}
moment.add = functionïŒmeasureãammountãselfïŒ{
var $ moment = selfïŒ thisïŒthis.cloneïŒïŒ;
//å®éã®ã³ãŒã
$ momentãè¿ããŸãã
}
ã¿ãªããã2ã»ã³ãããããšãããããŸã:)
ãããã³ã«ã«ã€ããŠã¯ã @ icambronã®æåŸã®æçš¿ã«ãã¹ãŠã®ç¹ã§åæããŸãã
æ®ã£ãŠãã2ã€ã®å€§ããªè³ªåããããŸãã
ç°¡åãªã®ã¯ãæ°ããAPIãã©ãããã¹ããã2ã€ã®ãªãã·ã§ã³ã§ãã
1.1ç°ãªãååã®ã¡ãœããïŒå¯å€ããã³äžå€ïŒ year
/ setYear
ã startOf
/ setStartOf
1.2ãŸãã¯ãã«ããŒAPI chain().mutators().build()
ãããã¯@lfnavessãææ¡ãããã®ã®ããããŒã§ã¯ãªãããŒãžã§ã³ã§ãã
ãã«ããŒAPIã¯ééããªãã»ã¯ã·ãŒã«èŠããŸããããªããžã§ã¯ãããã«ãã¢ãŒãã«é·æéçãŸããªãããã«æ³šæããå¿ èŠããããŸããããã«ãããç§ãã¡ãšãŠãŒã¶ãŒã«å¥ã®åé¡ãçºçããŸãã
ä»ãé£ããåé¡-æ°ããããŒãžã§ã³ãžã®ç§»è¡ã ããã«2ã€ã®ãªãã·ã§ã³ããããŸãã
2.1éçºè
ã¯ã³ãŒããæžãçŽãå¿
èŠããããŸãïŒã¯ã¬ã€ãžãŒæ£èŠè¡šçŸã¯1.1ããã³1.2ã®ASTã¬ãã«ã®ãœãªã¥ãŒã·ã§ã³ã§æ©èœããå¯èœæ§ããããŸã-èªåã®ã¡ãœããã®ååãšããŠyear
ããã³month
ã䜿çšãã人ãããªãå ŽåïŒã pythonã¯ãã®ã¢ãããŒããæ¡çšããŸãã-ç§ãã¡ã¯ççµæãèŠãããšãã§ããŸã-ãŸã£ããæ°ããèšèªãçãŸããŸããïŒ
2.2ãã«ããŒAPIãåžžã«ãªã³ã«ãããªãã·ã§ã³ïŒçŸåšãšåãïŒãããã³æ°ããã³ãŒãã«å¯ŸããŠéã¢ã¯ãã£ãåããæ¹æ³ã ããã¯ãã_é²åç_ã«èŠããŸããããããåŒãèµ·ããæ··ä¹±ã®éã¯ããããããã ãã®äŸ¡å€ã¯ãããŸããã ãã¹ãŠã®ç¬éã«2ã€ã®ãã©ã°ããããŸããããã¯å¯å€ã§ããããããã§ããå Žåã¯-å³å¯ã«å¯å€ã§ãããïŒã²ãã¿ãŒãªãïŒããŸãã¯äžæçã«å¯å€ã§ãããïŒã²ãã¿ãŒã¯OKïŒã§ãã é¢æ°ã§ã¢ãŒã¡ã³ããªããžã§ã¯ããåä¿¡ããããšã¯èšããŸã§ããããŸãããã¢ãŒããäœã§ãããã確èªãããããç¶æããããã«ããŠãã ãã...ãªããŠæ··ä¹±ãªã®ã§ãããã
ãããŠä»ãç§ã«æãã€ããã¯ã¬ã€ãžãŒãªã¢ã€ãã¢
m = moment();
funcIDontTrust(m.clone()); // doesn't actually clone
function funcIDontTrust(m) {
m.year(2005); // perform the clone here
console.log(m);
}
ã€ã³ã¹ã¿ã³ã¹ãããªã軜ãããšãèãããšããã®ã¢ãããŒãã§ã©ãã ãåæžã§ãããã¯ããããŸããã ãŸãããã¹ãŠã®ãã¥ãŒããŒã¿ãŒããã§ãã¯ãå®è¡ããå¿ èŠããããŸãã
ããŸããŸãªã·ããªãªã§ããŸããŸãªããã©ãŒãã³ã¹ã䜿çšããŠå®è£ ããæ¹æ³ã¯ããã€ããããŸãã è¯ããã¥ãŒã¹ã¯ãäžäœäºææ§ããããç§ãã¡ãšãŠãŒã¶ãŒã®åŽåãå€§å¹ ã«ç¯çŽã§ããããšã§ãã ãããŠãããã¯è»èŒªã®åçºæãããéèŠã ãšæããŸãã
ããã§äœãåŸãŠããã®ãããããŸããã
äžå€æ§ãžã®åãæ¿ãã«ã¯å€ãã®é¢é£ã³ã¹ãããããããããç§ã¯ãããèŠéããŠããŸããã
åçã®ã¡ãªããã¯ããŸãèŠãããŸããã
äž»ãªå©ç¹ã¯éçºè
ã®å¥œã¿ã®ããã§ãã ããã¯ãã¹ãŠãéçºè
ãæã£ãŠããªãããã«ããããã§ãã
ãããæž¡ããšãã«ç¬éã®æææš©ã«ã€ããŠèããããã«ïŒ
äžå€æ§ã«åãæ¿ããããšã§ãã°ã®é »åºŠãæžããšã¯æããŸããã
ãã°ã®çš®é¡ãå€æŽããŸãã @ichernevã®äŸã¯ãæ£ç¢ºãªçš®é¡ã®ãã°ã瀺ããŠããŸãã
è¡šé¢ãããã¯è¿œè·¡ããã®ãšåããããé£ããã§ãã
m = moment();
funcIDontTrust(m.clone()); // doesn't actually clone
function funcIDontTrust(m) {
m.year(2005); // perform the clone here
// m is still in 2014
// m.year(2005) created a clone but did not assign it to anything
// it should be `m = m.year(2005)`
console.log(m);
}
ããã¯ãå¯å€æ§ãšäžå€æ§ã®éã®è³åŠäž¡è«ã®ãªã¹ãã§ãã ç§ãäœããéããå Žåã
ç§ã«ç¥ãããŠãã ããããããŠç§ã¯ãã®ã³ã¡ã³ããç·šéããŸãã
| äžå€| å¯å€|
| --- | --- |
| äžéšã®éçºè
ã¯ããã奜ã¿ãŸã| ä»ã®ããã€ãã®éçºè
ã¯ããã奜ã¿ãŸã|
| ç¬éãåããšãã®ãã°ãåé¿ããŸã| è€è£œãããã¢ãŒã¡ã³ãã®å²ãåœãŠãå¿ããå Žåã®ãã°ãåé¿ããŸã|
| æ°åã®æ°ããAPIã¡ãœããã§ãå¯å€æ§ããµããŒããããŸã| æ¢åã®.cloneïŒïŒã¡ãœããã§ã¯ãäžå€æ§ã¯ãã§ã«ãµããŒããããŠããŸã|
| | æ¡éãã«éã|
| | 䜿çšããã¡ã¢ãªã倧å¹
ã«å°ãªããªããŸã|
äžå€æ§ã¯äŸ¿å©ã ãšæããŸãããJavaScriptã«ã¯ããŸãé©ããŠããªããšæããŸãã äžå€ã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãäžå€æ§ãæåŸ ãããElmã®ãããªèšèªã«ã¯æå³ããããšæããŸãããJavaScriptã®å Žåãå¯å€æ§ãæåŸ ããããšæããŸãã
typeof a === "object"
ãã«ãã€ã³ã®APIã®å€ãã¯å€æŽå¯èœã§ãã Array#push,pop,reverse,sort,shift,splice,unshift
ãã¹ãŠãæ°ããé
åãè¿ãã®ã§ã¯ãªããé
åã®å
容ãå€æŽããŸãã 16åã®Date#setX
ã¡ãœããã¯ãã¹ãŠãã€ã³ã¹ã¿ã³ã¹ãå€æŽããŸãã
ç¬éãå€åããããšã«ã€ããŠäžæºãèšã人ã¯ãããããããšæããŸãããåãæ¿ãããšåããããå€ãã®äººãäžæºãèšãããã«ãªããšæããŸãã ããã¯ã2幎åã«eod/sod
ã¡ãœããã§ãã§ã«çºçããŠ
å¯å€æ§ã«é¢ããå€ãã®å€ãåé¡ãèŠãåŸãç§ã¯ããããããã§å£ããã¬ã³ãŒãã®ããã«èãããŠãããšæããŸãã ã©ã¡ãã®åŽã§ããããã¯éå»æ°å¹Žéæèµ·ãããŠããã®ãšåãç¹ã§ãã å€æŽå¯èœãªAPIãç¶æããããã®è°è«ãè°è«ã«è¡šãããŠããããšã確èªãããã£ãã ãã§ãã
@timrwoodã¯è¯ãæ¯èŒã§ãããäžå€ã®ãŠãŒã¹ã±ãŒã¹ãç解ããã®ã«æéãããã£ãŠããªãããšã¯æããã§ãã æçš¿ããããã©ãŒãã³ã¹ã®æ¯èŒã§ãå®è£ ãäžååãªAPIãæ³å®ããŠããŠãæå³ããªãçç±ã«ã€ããŠã¯ããã§ã«èª¬æããŸããã
ãã°æ¯èŒãç¡å¹ã§ãã momentjsã¯ãã§ãŒã³APIããµããŒãããŠãããããäžå€ã§ããããšãæåŸ ã§ããŸãã
var newM = m.year(2005) // wrong, these are both the same!
ãããã£ãŠãäžå€ãšå¯å€ã®äž¡æ¹ã«ãçŸåšåãåé¡ããããŸãã ãã§ãŒã³APIãåé€ããã°ãçŸåšã®å¯å€ããŒãžã§ã³ã§ãããåé¿ã§ããŸãã
ãããã£ãŠãé¢æ°éã§å®å šã«ç¬éãæž¡ãããšãã§ãããããäžå€APIã¯å¯å€ãããæãŸããã§ãã é¢æ°éã§ã¢ãŒã¡ã³ããæž¡ããšãçŸåšã®å¯å€ã¢ãŒã¡ã³ãã§2ã€ã®ãªãã·ã§ã³ããããŸã
1ïŒéåžžèãªãã°ã®ããæ¹æ³ïŒããããæãäžè¬çã§ãïŒïŒãã¹ãŠã®ãœãŒã¹ã³ãŒãã調æ»ããŠãäžèŠãªå€ç°ããªãããšã確èªããŸãã ãŠããããã¹ããäœæããŠãäžèŠãªçªç¶å€ç°ãå¿ã³å¯ããªãããšã確èªããŸãã
2ïŒæ£æ°ã®æ¹æ³ïŒä»£ããã«å
šå¡ããããè¡ã£ãŠãããšä»®å®ããŸãããïŒãé²åŸ¡çãªããã°ã©ãã³ã°ïŒé¢æ°ãå€æŽããåã«cloneïŒïŒé¢æ°ãåŒã³åºãããšãå¿ããªãã§ãã ããã
äžå€ã®APIã䜿çšãããšãæ¯åcloneïŒïŒãåŒã³åºãããšãèŠããŠããå¿ èŠã¯ãããŸããã 代ããã«ãã¯ããŒã³äœæãåé¿ã§ããAPIé¢æ°ãåŒã³åºãããšãå¿ããªãã§ãã ããããã ããããã¯ããã©ãŒãã³ã¹ã®æé©åã«ããããæ£ç¢ºãã®åé¡ã§ã¯ãããŸããã
äžå€ã®ãŠãŒã¹ã±ãŒã¹ãç解ããã®ã«æéãããã£ãŠããªãããšã¯æããã§ã
ããã¯äžå ¬å¹³ãªçºèšã§ãã ç§ã®äž»åŒµã¯ãç§ã¯å©çãç解ããŠããããããããè²»çšãäžåã£ãŠãããšã¯æããªããšããããšã§ãã
ããªãã¯å®å šã«æ©èœã®éã«ç¬éãæž¡ãããšãã§ããŸã
ã¯ããŒã³ãåŒã³åºãããšãèŠããŠããå¿ èŠã¯ãããŸãã
ããã¯äžå€æ§ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãããŸãããïŒ ç§ãç解ããã®ã«æéãããããªãã£ãããšããã以äžãããªãã°ãç§ã«ç¥ãããŠãã ããããããããã¯éå»æ°å¹Žéã®å¯äžã®è°è«ã®ããã§ãã
@timrwoodã¯ããããããã¹ãŠã®ã±ãŒã¹ã§ãã
ããããããªãã®ã±ãŒã¹ãäžå€æ§ïŒã²ã©ãããã©ãŒãã³ã¹ãå¯å€APIã«ååšããªãå¥ã®ã¿ã€ãã®ãã°ãå©é·ããïŒãç¡å¹ã§ããããšãèªããå åã¯èŠãããŸããã
FreezeïŒïŒã圹ç«ã€ãã©ããããããŸãã
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
ecmascript 5ã®èŠ³ç¹ã«åºå·ããçŸåšã®ãªããžã§ã¯ãããã£ãŒãããªãŒãºããé¢æ°ããŸãã¯ããªãŒãžãŒãªããžã§ã¯ããèªåçã«äœæããã°ããŒãã«ãã©ã°ãè¿œå ããå¿ èŠããããšæããŸã
http://blogorama.nerdworks.in/preventextensionssealandfreeze/
ããªãŒãºãªããžã§ã¯ãã¯ããªãŒãºè§£é€ã§ããªããããããªãŒãºãªããžã§ã¯ããäœæããããã®ã³ã³ã¹ãã©ã¯ã¿ãŒã®è¿œå ãã©ã¡ãŒã¿ãŒãããããŸãã
@lfnavessæžã蟌ã¿æã®ã³ããŒã«ã€ããŠèšåããåã«ã freeze
ã«ã€ããŠèããŸããã åé¡ã¯...誰ãããã䜿çšããªã/ç¥ããªããšããããšã§ãããŸããäŸå€ãã¹ããŒããªãå ŽåïŒéå³å¯ã¢ãŒãã®å ŽåïŒã¯åœ¹ã«ç«ã¡ãŸãããå®éã«ã¯ã远跡ããããã®ã¯ã¬ã€ãžãŒãªãã°ãäœæãããŸãã
@timrwoodäŸãæ確ã«ãããšã¯æããŸããã m.year(2014) // clone here
ã§ã¯ãå
éšçã«ã¢ãŒã¡ã³ããå®éã«ã¯ããŒã³ãäœæãïŒããå€ãã®ã¡ã¢ãªãå²ãåœãŠïŒãmããã®æ°ããã¡ã¢ãªãèªåçã«æãããšãæå³ããŸããã ããã¯åºæ¬çã«ã clone()
ãã·ã§ã«ã¡ã¢ãªïŒå
éšã®æ¥ä»è¡šçŸãæããã®ïŒãå°ãå²ãåœãŠãå¿
èŠãããããšãæå³ããŸããããããããšã§ã©ãã ãã®å©çãåŸããããã¯ããããŸããã
ã€ã³ã¿ãŒãã§ãŒã¹ã®ã¿ãè€è£œããåºç€ãšãªãããŒã¿ãïŒå
±æã¹ãã¬ãŒãžããã€ã³ã¹ã¿ã³ã¹åºæã«ïŒå€æŽããæ©èœãåããclone
åã°ããŒãžã§ã³ãäœæããŸããããã¯ãå®éã«ã¯Dateãªããžã§ã¯ãã®ã³ã¹ãã«äŸåããŸãã æ¬ ç¹ã¯ããã¹ãŠã®é¢æ°ãè¡ãå¿
èŠãããããšã§ãthis._storage._d
ã®ä»£ããã«this._d
ããããŠãããå©çãå
æãããã©ããã¯ããããŸããã
çŸåšã®æ¢åã®ã©ã€ãã©ãª/ãŠãŒã¶ãŒã®ç§»è¡ã«å¯ŸåŠããæ¹æ³ã«ã€ããŠã®ã³ã¡ã³ãã¯ãããŸããã§ããã äžèšã®ãªãã·ã§ã³ã¯ã©ãã奜ãã§ã¯ãããŸããã
éäºææ§ã¯ãIMOãããã«å¯Ÿããæã匷åãªè°è«ã§ãã ãããè¡ãå Žåãããã倧ããªé倧ãªå€åã§ããããšãåãå ¥ããå¿ èŠããããŸãã ãããåãå ¥ããããªãã®ãªãããããã¹ãã§ã¯ãããŸããã
reïŒperfã«ã€ããŠã¯ãäžå€æ§ããåŸããã倧ããªå©ç¹ãããã€ãããããšãèšåãã䟡å€ããããŸãã å調ãªããã©ãŒãã³ã¹ãããã§ã¯ãããŸããã ããšãã°ãç©äºã¯æ±ºããŠå€æŽãããªãããããªããžã§ã¯ãã¬ãã«ã§ãã£ãã·ã¥ããããšãã§ããŸãã ãŸãã clone()
ããçããŠãããããããæé©åã§ããã¯ãã ãšæããŸãã AFAIKã«ã¯ãæ¥ä»ã®ã¯ããŒã³ãäœæãã5ã€ã®å€ã®ããã«ã³ããŒããããšãå«ãŸããŸãã newThing._offset = oldThing._offset
ããã«ããŒãã³ãŒãã£ã³ã°ããå¿
èŠããããšæããŸãã
Editãargãno-ãã©ã°ã€ã³ããã£ãŒã«ããè¿œå ããŸãïŒäŸïŒããïŒã
äžäœäºææ§ã匷ãæãã§ããã«ãããããããç©äºã軜éã«ä¿ã€ããšã匷ãæãã§ããããšãèãããšãæåã®è§£æ±ºçã¯javascriptãœãŒã¹ããã©ãŒã¯ããããšã ãšæããŸãïŒãã®ãããžã§ã¯ãã®ãœãŒã¹ãŸãã¯ãŸã£ããæ°ãããããžã§ã¯ããéå§ããŸãïŒã ã€ã³ã¿ãŒãããçšã®è€æ°ã®æéã®å³æžé€šã®ããã®äœå°ããããŸãã
ãŸãïŒreïŒæ§é å ±æã«é¢ãã@ichernevã®ã¢ã€ãã¢ã1ã€ã®å¯èœæ§ã¯ãå ±æç¶æ ãªããžã§ã¯ããã©ãããã代ããã«ãããã¿ã€ãç¶æ¿ã䜿çšããããšã§ãã
ç§ãã¡WhoopIncã¯ãããªãé·ãéãã®è°è«ã«æœãã§ããŸãã ããã§ã®è°è«ã¯åŸªç°ããŠããããã«æãããã®ã§ãç§ã¯ä»é±æ«ããã«ããŒAPIã䜿çšããäžå€ã®ç¬éãã©ã®ããã«èŠãããã調æ»ããããã«æéããããŸããã ïŒç§ã¯ãæåŸ ãããªãéããç¬éã«å¯ŸããŠPRãæåºããã€ããã¯ãããŸãããããã¯ãç¬éèªäœã«å®è£ ããããšäºæ³ãããããããæå³çã«APIã®å€æŽãå³ããããŠããããã§ããïŒçµæã¯æ¬¡ã®ãšããã§ãïŒ httpsïŒ// githubã com / WhoopInc / frozen-moment
ç§ã¯ã»ãã®æ°æéããçµã£ãŠããªãã®ã§ããã¹ãŠã端ãã端ãŸã§éåžžã«èãã§ããããã¹ãçµæã«åºã¥ããŠãã³ã¢ã¢ãŒã¡ã³ãæ©èœã®ã»ãšãã©ãæ©èœããŠãããšæããŸãã ç§ã¯ãã®äŒè©±ã远跡ãç¶ããŸãããããŠç§ã¯ç§ãã¡ã®ã¬ãã®åé¡ã§ç§ãã¡ã®ãã©ãŒã¯ã«ç¹æã®ãã£ãŒãããã¯ãæè¿ããŸãã
ä»å€ããã®ãªããžããªã§ããã€ãã®æŽæ°ãããããã¥ã¡ã³ããå
¬éããããšããŸãããåºæ¬çã«ã¯ããã¹ãŠã®setterã¡ãœãããšmutationã¡ãœãããå¥ã
ã®ãã«ããŒãªããžã§ã¯ãã«åå²ããã ãã§ãã ãããã£ãŠãAPIã®äœ¿çšã¯frozenMoment("2014-07-21").thaw().subtract(1, "day").startOf("day").freeze().format("YYYY-MM-DD")
ãŸãã ïŒãã®ç¹å®ã®äŸã§ã¯ã frozenMoment.build("2014-07-21").subtract...
ã䜿çšããŠãfrozenMomentãããã«ããŒãåæåããã®ã§ã¯ãªãããã«ããŒã§ãã§ãŒã³ãéå§ããæ¹ãå¹ççã§ããïŒ
FWIWãç§ã䜿çšãéå§ãããšããç§ã¯ãããFPã®ååã«åŸã£ãŠããŠãé¢æ°ãåŒã³åºããã³ã«åãå€ãè¿ããšæã£ãŠããŸããã
var now = moment();
var yesterday = now.subtract(1, 'days');
var dayBeforeYesterday = now.subtract(2, 'days');
ãã¡ãããæåŸ ããçµæã¯åŸãããŸããã§ããã ããã¯ç§ãæ°ãããŠãŒã¶ãŒãšããŠäžæãçªãããã
ãã®ç䌌ã³ãŒãã«ã€ããŠèããŠã¿ãŸããããããã¯ãã³ãŒããã©ã®ããã«åäœããããšãæåŸ ããŠãããã瀺ããŠããŸãã
var now = now;
var yesterday = now - 1day;
var dayBeforeYesterday = now - 2days;
ãããã代ããã«ããã¯ãã®ããã«æ©èœããããšã«ãªããããã¯ç§ã«ã¯å¥åŠã«æããŸãïŒ
var now = now;
var yesterday = now = now - 1day;
var dayBeforeYesterday = now = now - 2days;
ä»ã®ãšãããããã¯ããªãéå±ã§ãããç§.clone()
ã©ãã§ãæ
éã«
var now = moment();
var yesterday = now.clone().subtract(1, 'days');
var dayBeforeYesterday = now.clone().subtract(2, 'days');
IMOãJavascriptã¯åŸ®åŠãªãšã©ãŒãèµ·ãããããã®ã§ãFPã®ååããããã®ãšã©ãŒãæå°éã«æããã®ã«åœ¹ç«ã€ãšæããŸãã
ããã¯é£ãã決æã ãšæããŸãã ç§ã¯ããªãã®ä»äºã«æè¬ããŸãã Moment.jsã¯çŽ æŽãããã§ãã
100ïŒ ã®äžå€æ§ã®å Žåã¯+1ã
äžå€ã§ãªãã®ã¯æ£çŽãªãšããã€ã©ã€ã©ããŸãã
ããŒãžã§ã³3ã§100ïŒ ã®äžå€æ§ã®å Žåã¯+1
ééããªãäžå€ã®APIãããã¯ãã§ãã ä»ã®æ¥ä»ã©ã€ãã©ãªïŒç¹ã«ã.NET DateTime
ããã³Joda Time / Noda TimeïŒã®ãŠãŒã¶ãŒãšããŠã add
ã¡ãœãããæ¥ä»ãªããžã§ã¯ããå€æŽããªãããšãçŽæçã«æåŸ
ããŠããŸãã
äžå€æ§ã®+1
100ïŒ ã®äžå€æ§ã®å Žåã¯+1
äžå€æ§ã®æ±ºå®ãäžãããå Žåãç§ã¯ãããå®çŸããããã«æéãå²ããŠåãã§ããŸãã ããããããããªé話ã§ãã¢ãªã³ã°ããŸãã ãªãŒãã³ãœãŒã¹ã«ãã£ãšè²¢ç®ãããã®ã§ãããããŒããåŠã¶å¿ èŠããããŸãã
ç§ã«ãšã£ãŠã¯äžå€æ§ãæãŸããã§ãããæåããè¡ãå¿ èŠããããŸããã ããã¯åçãªç Žå£çãªå€åã§ãã äžå€æ§ã«çŠç¹ãåœãŠããã®ãããžã§ã¯ãã®ãã©ãŒã¯ã¯ãããè¯ãã¢ã€ãã¢ã§ãã
@dsherretãããsemverã®ç®çã§ãã ã¡ãžã£ãŒããŒãžã§ã³ããã³ãããã ãã§ãã
ãã ããããçšåºŠã®åªåãæãã°ãããã¹ãŠãäžå€ã«ããŸããïŒTrueãŸãã¯Falseããšããæ§æãªãã·ã§ã³ãšããŠå°å ¥ã§ããŸãã ããã©ã«ãã¯falseã«ãªããŸãã
ãµããŒããããŠããªãéå ¬åŒã®ymmväžå€ã¢ãŒã¡ã³ããã©ã°ã€ã³ã¯ãã¡ãïŒ https ïŒ//gist.github.com/timrwood/fcd0925bb779f4374a7c
ããïŒ ãã£ãšåŸã«ããã«æ¥ãŠãç§ãããäžå€ã®APIã®æåã®æ¯æè ã®1人ã§ããããšãçºèŠããŠé©ããã..:)
ãããŠãã¯ããç§ã¯æ¬¡ã®ã¡ãžã£ãŒããŒãžã§ã³ã®äžå€æ§ã®ããã«+1ã§ãã
ç§ããã®ããã©ã«ãã§äžå€ã®ç¬éã®ããã®å¥ã®+1ã
ãããŠããããç§ã®ãimomentãã®èª¿åã§ãïŒ https ïŒ//gist.github.com/idrm/a91dc7a4cfb381dca24eïŒèªå·±è²¬ä»»ã§äœ¿çšããŠãã ããïŒïŒã momentïŒïŒåŒã³åºããimomentïŒïŒã«çœ®ãæããã ãã§ãããã§ååã§ãã ãã¹ãŠã®éçmoment.xyzïŒïŒïŒäŸïŒmoment.minïŒïŒãmoment.maxïŒïŒãªã©ïŒé¢æ°åŒã³åºãã¯ãã®ãŸãŸã«ããŠããå¿
èŠããããŸãã
+1çŸäžãã«
äžå€æ§ã®+1
ãã®ãã£ã¹ã«ãã·ã§ã³ã¹ã¬ããããã®ä»¥åã®ææ¡ã«+1ãè¿œå ããŠãäžéšã®é¢æ°ã®ååãèªã¿ãããããããšãã§ããŸãïŒ "startOf"ãã "toStartOf"ã "add"ãã "plus"ã "month"ãã "withMonth "ã NSãïŒïŒ ã€ãŸããããã©ã«ãã§äžå€ã®ã«ãŒããåããšä»®å®ããŸãã ç§ã¯JodaTimeããã䜿çšããŸãããããšãã°ãdate.withDayOfMonthïŒ1ïŒ.withDayOfWeekïŒDateTimeConstants.MONDAYïŒãã®æå³ãç°¡åã«ç解ã§ããŸãã
ããããã¡ã€ã³ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³JSã«ããå¿
èŠã¯ãããŸããã ããã©JSã®äžã«ããããå©ãã¢ããªã³ãåæ§ã«æ©èœããŸãïŒç§ã¯ããã®ãããªJoda Timeã«åãããã¢ããªã³ãèªåã§äœæããŠããimomentãmodãšçµã¿åãããæ¹æ³ã匷ãæ€èšããŠããŸãïŒã
@ ichernev ã @ icambron ãããªãã¯ããã«ã€ããŠæ±ºå®ãäžããŸãããïŒ 3.0ã§ã¯ã¢ãŒã¡ã³ãã¯äžå€ã«ãªããŸããïŒ ãããããªãïŒããªãã¯ãã€3.0ãåºããšæããŸããïŒ åçµã¢ãŒã¡ã³ãã䜿çšããããèªåã§å°ããªã©ãããŒãäœæããããšãæ€èšããŠããã®ã§ãç§ã¯å°ããŠããŸãâãããŠç§ã¯åŸ ã€ã¹ããã©ããçåã«æããŸãã
åèãŸã§ã«ãfrozen-momentã¯æè¿ãã»ãšãã©ãåŸ æ©ãã¿ãŒã³ã«ãªã£ãŠããŸããäžæµã®Momentããå€æ°ã®PRã移æ€ããŸãããããã®ãã©ãŒã¯ã§çæ³çã«çºçããã¯ãã®ä»ã®ãªãã¡ã¯ã¿ãªã³ã°ã«ã¯å®éã«ã¯åãçµãã§ããŸããã
ãšã¯èšããã®ã®ãããã©ã«ãã®è±èªãã±ãŒã«ã®ã¿ãå¿ èŠãªå Žåã¯ãfrozen-momentãããŸãæ©èœããã¯ãã§ãã ïŒãã¹ãŠãç§ã®ãŠãŒã¹ã±ãŒã¹ã§æ©èœããMomentã®é«ããŠããããã¹ãã«ãã¬ããžãç¶æããŠããŸããïŒè±èªä»¥å€ã®ãã±ãŒã«ã¯ãMomentã®æè¿ãªãã¡ã¯ã¿ãªã³ã°ããããã±ãŒã«APIã移æ€ããåŸã«æŽæ°ãããªãã£ããããå£ããŠããŸãã
Moment 3.0ã®æ±ºå®ãã§ãââãããMomentã§ã®äžå€æ§äœæ¥ããŸãã¯å¿ èŠã«å¿ããŠåçµã¢ãŒã¡ã³ããã©ãŒã¯ã§ããå°ãçå£ã«åãçµãäºå®ã§ãã ç§ã®æåã®ç®æšã¯ããã±ãŒã«ã®ãµããŒããä¿®æ£ããMoment3.0ã®APIãšã®æ©èœã®åçæ§ãç¶æããããšã§ãã
äžå€æ§ã®+1
äžå€æ§ã®å Žåã¯+1ã ãªããžã§ã¯ããå€æŽããformat
ã¡ãœããã¯ã©ãã§ããïŒ
äžå€ã®moment.jsã®+1
ãŸãã¯å€åmoment.jsã®ãã©ãŒã¯ïŒ immutable-moment.jsïŒ ããã¯ééããªãé倧ãªå€æŽã«ãªãããã§ãã
ïŒ100ïŒ
imootablesãè¡ããŸãïŒ
+1æè¿ã®äžå€æ§ã¯ãåªããJSAPIã«æåŸ ãããã®ã§ãã
ïŒ+1ïŒã¯ããã©ãããããããé¡ãããŸãã çŸåšã.cloneïŒïŒãããããšããã«æ£ãã°ã£ãŠããŸãã
+1ããã¯éåžžã«çŽ æŽãããæ¹åã«ãªããŸã
ïŒ+1ïŒãã¹ãŠã®ãã®ãäžå€
äžå€ã®å Žåã¯+1
ãã¹ãŠãäžå€ã«ããŸãã nowå€æ°ãæäœããåã«ããã¹ãŠã®momentïŒnowïŒå€æ°ã®ã¯ããŒã³ãäœæããããšã«ããããããŠããŠããã®åŸãnowãåã³å€æŽãããŸãã
äžå€æ§ã®+1
startOf('day')
ãå€åãããšã¯æã£ãŠããŸãã
ç§ã¯ãmoment.jsæŒç®åã®ã»ãšãã©ãå¯å€æ§ã«åé¡ãããããšã«ééããªãåæããŸãã mmnt.startOf('day')
ã¯ã mmnt
å€æŽãããšããç¹ã§ãçŽæçãªã¹ãŒããŒã«ãŠã³ã¿ãŒã§ãã
å€ãã®ã«ãŒããšæ¥ä»æ¯èŒã䌎ãã«ã¬ã³ããŒã¿ã€ãã®ãŠãŒã¹ã±ãŒã¹ã«moment.jsã䜿çšããŸãã clone()
ããã©ãŒãã³ã¹ã®åé¡ãçºçããŸãããããããã¯ã²ã©ããã®ã§ãã ã©ã®ã¯ããŒã³ãšäœãå€ç°ããããããçšåºŠå¶åŸ¡ããããšã¯ãç§ãããããä»ã®äººã«ãšã£ãŠäžå¯æ¬ ã§ãã
clone()
ã©ãã«ã§ãããããšã¯æåã¯åä»ã«æããŸããããããè¡ãããšã¯éåžžã«æ確ã§ãããããã©ãŒãã³ã¹ã®ããã®ãªãã¡ã¯ã¿ãªã³ã°ãéåžžã«ç°¡åã«ãªããŸããã
ããè¯ãAPIãåŸãããã«ããã¹ãŠã®ã¡ãœãããå
éšã§clone()
ç²ç®çã«äœ¿çšãå§ããå Žåãç§ãã¡ã¯ãã®èŠç¹ãèŠéããŠãããšæããŸãã
ç§ã®2¢:-)
@jdurandæ瀺çã«è€è£œããããããæ瀺çã«å€æŽãããã
@dsherretæ瀺çã«ã¯äœãæ°ã«ããŸããã ç§ã®äž»ãªé¢å¿äºã¯ãéåžžã«ã³ã¹ãã®ãããæäœã§ãããããæé»çã«ã¯ããŒã³ãäœæã
ã»ãã¿ãŒã¯ã¯ããŒã³ã³ããŒãè¿ãå¿
èŠããããšèª°ããèšã£ãã®ã§ãç§ã¯æãã£ãã ããã¯éåžžã«éå¹ççã§ãã
@jdurandã®æ¹ãéå¹ççãããããŸããããæé»ã®ã¯ããŒã³ã¯ãã¯ããŒã³ãªããžã§ã¯ããšå€æŽããããªããžã§ã¯ãã®éãããšã³ããŠãŒã¶ãŒã®ãšã¯ã¹ããªãšã³ã¹ã«ç®ç«ã£ãéãããããããªãã¢ããªã±ãŒã·ã§ã³ã®å€§éšåã«ã¡ãªããããããšæããŸãã éçºè ã®å€§å€æ°ã¯äžåºŠã«äœåãã®æ¥ä»æäœãè¡ã£ãŠããªããããéçºè ã®äœ¿ãããããšéçºè ãšã©ãŒã®é²æ¢ã®è©Šã¿ã¯ãç¯çŽãããæ°ããªç§ãããåªå ãããã¹ãã ãšæããŸãã ããã§ããã°ãã¯ããŒã³ãäœæãã代ããã«å€æŽããããšæ瀺çã«èšãããšãã§ããŸãã
è£è¶³ïŒãã®å€æŽã«ãããããã©ãŒãã³ã¹ãåäžããå¯èœæ§ããããšæããŸã...ããšãã°ã代ããã«éå»ã®äžå€ãªããžã§ã¯ããåç
§ãããã®ãªããžã§ã¯ãã«å¯ŸããŠå®è¡ããæäœãä¿åããããšã§ãã¯ããŒã³äœæãæé€ã§ããŸãïŒäŸïŒ add(1, 'days')
ïŒã çµæã¯ã .toString()
ã .format()
ã .toDate()
ã .day()
ãªã©ãåŒã³åºããããšãã«ã®ã¿æäœãå®è¡ããããšã«ãã£ãŠèšç®ãããŸãã ããã¯åçãªå€åã§ãããæçµçã«ã¯é«éã«ãªããªãå¯èœæ§ããããŸã...ããã©ãŒãã³ã¹ãæ¯èŒããããã«ããã€ãã®åäœãã¹ããå®è¡ããå¿
èŠããããŸãïŒããã«ãã³ãŒããèŠãããšããªããããèæ
®ããŠããªãä»ã®åé¡ãããå¯èœæ§ããããŸãã¯ããŒã³äœææ¹æ³ä»¥å€ã®moment.jsã§ïŒã
@dsherretç§ã¯_builder_ / _lazy_ã¢ãããŒãã奜ãã§ãã åŸããèãããšãããããæåãããã®ããã«æ§ç¯ãããŠããã¯ãã§ãã
ãã£ãããããã«ãAPIã®äºææ§ã念é ã«çœ®ããäžå€ã®ãã©ãŒã¯ãæé©ã ãšæããŸãã
ããã«2ã»ã³ãïŒ
ãã€ããç§ãã¡ã¯å€åãå£ãããšããšãŠãæããŠããŸããïŒ çŸåšã®ããŒãžã§ã³ã¯å®å®ããŠãããã³ãŒãããŒã¹ããªãã¡ã¯ã¿ãªã³ã°ããªããŠãåŒãç¶ã䜿çšã§ããŸãã
2ã€ã®ã³ãŒãããŒã¹ãç¶æããããšã¯èŠçã§ãããé床ãäœäžããå¯å€/äžå€ããŒãžã§ã³ãçšæããã ãã®äŸ¡å€ã¯ãããŸããã
ããã§ã¯ãå®å šã«äžå€ã®ç¬éã«è¡ããã¡ãžã£ãŒããŒãžã§ã³ããã³ãããŠãããã§å®äºããŸãããïŒdancersïŒ
ãã®ã©ã€ãã©ãªã䜿ãå§ããã°ããã®ãšãã«ãã®ã¹ã¬ãããèŠã€ããŸããããã³ãŒãã®ãããã°ãè¡ã£ãŠããŠãå€æŽå¯èœã§ããããšã®äºæž¬ã§ããªãå¯äœçšã®ããã«æãããŸãã ã©ã€ãã©ãªã®å®å šã«äžå€ã®ããŒãžã§ã³ãèŠããã§ãïŒ
æ¥ç¥ãããªãã©ã°ïŒç§ã¯ããã§ç¢ºåºãã決å®ãåŸ ã€ã®ã«ããããããŸããã éå»æ°æ¥éãç§ã¯Frozen Momentã埩掻ãããMomentèªäœã®ãã©ã°ã€ã³ãšããŠæ©èœããããã«æžãçŽããŸããã é±æ«ã«æåã®ãã¬ãã¥ãŒãªãªãŒã¹ãå®äºããã®ãæäŒã£ãŠããã@wyantbãžã®åžœåã®ãã³ãã
Frozen Momentã¯ãMomentãšåãããã«æ©èœããäžå€ã¿ã€ããæäŸããŸãã åºæ¬çã«ãäžå€ããŒãžã§ã³ã¯Momentã®æ©èœãã©ããããå¿
èŠã«å¿ããŠ.clone()
ãåŒã³åºããŸãã
ãã«ããŒAPIã奜ããªäººã¯ãMomentèªäœããã«ããŒãªããžã§ã¯ãã®éåžžã«åªããå®è£ ãšããŠèããããã«ææŠããŸãã Frozen Momentã¯ãç§ãã¡å šå¡ãå¿ èŠãšããã³ã¢ã®äžå€ã¿ã€ããšãå¯å€Momentããäžå€ã®FrozenMomentãæ§ç¯ããããã®ã¡ã«ããºã ãè¿œå ããŸãã
䟿å©ãªäžå€ã®APIã䜿çšãããã ãã®äººã®ããã«ãç§ãããããµããŒãããã€ããã§ãã Frozenã€ã³ã¹ã¿ã³ã¹ãçŽæ¥ãã«ãããã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãŸã äœæããŠããŸããããTODOãªã¹ãã«ãããŸãã çæçã«ã¯ãåé¿çã¯moment().freeze()
ãŸãã¯moment.utc().freeze()
ãã¹ãŠãäœæããããšã§ãã
Frozen Momentã¯æããã«è¥ãã³ãŒãããŒã¹ã§ãããããããããããã€ãã®èåããªéšåããããŸãããæåŸ ã©ããã«æ©èœããªããã®ã«ã€ããŠã¯ãè©ŠããŠã¿ãŠåé¡ã解決ããããšããå§ãããŸãã
ããããã1ã€ïŒç§ã¯ãŸã ããã宣äŒããŠããŸããããFrozenMomentã€ã³ã¹ã¿ã³ã¹ã¯ã»ãšãã©ã®Momentãã©ã°ã€ã³ã§ãæ£ããæ©èœãããã¯ãã§ãã ä»ã®ãã¹ãŠã®Momentãã©ã°ã€ã³ãFrozenMomentã®åã«ç»é²ãããŠããããšã確èªããŠãã ããã äžå€ã®FrozenMomentsã§æåŸ ã©ããã«æ©èœããªããã©ã°ã€ã³ãèŠã€ããå Žåã¯ããã°ãå ±åããŠãã ããã調æ»ããŸãã
äžå€æ§ã®+1
äžå€ã®å Žåã¯+1
誰ããImmutableJSã®äžã«ã¢ãŒã¡ã³ããå®è£ ããããšãæ€èšããŸãããïŒ ããã¯JSã§ã®äžå€æ§ã®ããã«æé©åãããã©ã€ãã©ãªã§ãããäžå€ãªããžã§ã¯ãã®å€æŽãããŠããªãéšåãåå©çšããŠãã¡ã¢ãªã®åé¡ã軜æžããŸãã
+1
ãããåå ã§3幎åã®ãã°ãä¿®æ£ããŸããïŒ https ïŒ
ããã§ããŠãŒã¶ãŒã¯äžå€æ§ãæ±ããŸãããã³ã¢ããŒã ã¯ãããããªãèšãèš³ãèŠã€ããŸããïŒ ïŒNS
ããããã®å€æŽã¯ES6ã§ã³ãŒããæžãçŽããããã¯ããã«éèŠã§ã^^çŸåšã®åœ¢åŒã§ã¯ãAPIã¯åçŽã«æªããäžéšã®ã¡ãœããïŒãã£ã«ã¿ãŒãé£çµãªã©ïŒãäžå€ã§ããJSé
åã«å°ã䌌ãŠããŸãããäžéšã¯äžäœäºææ§ã«å¯Ÿããå¶çŽãã©ã€ãã©ãªãããç¡éã«é«ãããšãé€ããŠãä»ã®ãã®ã¯ïŒéããœãŒãïŒã§ã¯ãããŸããã
+1
ãã€ãç§ãæãŸããå°ããªçœ ïŒãããŠç§èŠããã¯äžå€æ§ã®æ£åœãªçç±ã§ãïŒïŒ
var today = moment();
for (var i = 0; i < 7; i++) {
week.push(today.subtract(i, 'days').format('dd').toUpperCase());
}
æ®å¿µãªãããããã¯æ¥ã®ååã®é åãçæããŸããããå®éã«ã¯æ¬¡ã®ããã«æ¥ä»ãèšç®ãããããå¥åŠãªããšãçºçããŸãã
i = 0 = today -0;
i = 1 = today -0 -1;
i = 2 = today -0 -1 -2;
etc
ãããã£ãŠãããã«ãªãã¡ã¯ã¿ãªã³ã°ããå¿ èŠããããŸãã
var today = moment();
for (var i = 0; i < 7; i++) {
if (i == 0) {
week.push(today.subtract(0, 'days').format('dd').toUpperCase());
}
else {
week.push(today.subtract(1, 'days').format('dd').toUpperCase());
}
}
@faebseråªããäŸ
äžå€æ§ã®+1
+1
@faebserã¯ä»æç§ã«èµ·ãããŸããã Angularã®åæ¹åãã€ã³ãã£ã³ã°+å¯å€æ§ã¯ãçŸåšã®æ¥ä»ãå€æŽããªãããã«ã¯ããŒã³äœææ¥ãç¶æããããã«**ã«èŠçãäžããŸãã
äžå€æ§ã®+1ãããã¯ç§ã«æ°æéããããŸããã
ïŒ+1ïŒ
äžå€æ§ã®+1
ç§ã¯ãã®ãããã¯ã«ã€ããŠå°ãåŒãè£ãããŠããŸãã
ç§ã®äžã®çŽç²äž»çŸ©è ã¯ããäžå€æ§ã®ããã«+1ïŒã¢ãŒã¡ã³ããªããžã§ã¯ãã¯æããã«ValueObjectã®çš®é¡ã§ãããšå«ã³ããã£ãŠããŸãã
ãã ããmoment.jsãGitHubã§13çªç®ã«äººæ°ã®ããjavascriptãªããžããªïŒããã³24çªç®ã®ãªãŒã«ã©ãŠã³ãïŒã§ãããbower.ioã§ãmomentããæ€çŽ¢ãããš111ã®äžèŽããçµæãè¿ãããããšãç¡èŠã§ããŸããã ã¢ããªã±ãŒã·ã§ã³ãã«ããŒã«ã¢ãŒã¡ã³ãã®äžå€ããŒãžã§ã³ãå®è£ ãã段éçãªæ¹æ³ãæäŸã§ãããšããŠãããã®äŸåé¢ä¿ã®éã«å€§ããªæ··ä¹±ãåŒãèµ·ããã§ãããã
@ichernevãããããã£ãšè¬èãªææ¡ïŒç¬éã®ããã¥ã¡ã³ãããŒãžã®ããäžéšãã
çŸåšãããã¥ã¡ã³ãããŒãžã«ã¯ãäžå€ããšããçšèªã¯èšèŒãããŠããŸããã ãmomentimmutableããã°ãŒã°ã«ã§æ€çŽ¢ãããšããã®ããŒãžã«ç§»åããŸãããèªãã®ã«2æéãããããã®ãããã¯ã«å¯ŸããçŸåšã®ã¹ã¿ã³ã¹ã«ã€ããŠã¯ãŸã ããããŸããã ãç¬éäžå€ãã«å¯Ÿããã°ãŒã°ã«ã®ãããããããç¬éã®äžå€æ§ã®æªæ¥ã«ã€ããŠã®è¿ éãªçããäžãããªããããã¯çŽ æŽãããããšã§ã:)
@ jehoshua02ãåŒçšããã«ã¯ïŒ
ãããã¯é£ãã決æã ãšæããŸããããªãã®ä»äºã«æè¬ããŸããMoment.jsã¯çŽ æŽãããã§ããã
ãããç§ã®ææ¡ã§ãã ããŒã¹ã¢ãŒã¡ã³ããäžå€ã«ãã代ããã«ã moment.immutable
ãã¡ã¯ããªãè¿œå ããŸãã ããã¯ã®è²¡ç£ã«ãªããŸãmoment
é¢æ°ãšåãæ£ç¢ºãªAPI眲åãå²ã¿ãŸãmoment
ããäžå€ã
ããã¯ããã®ãããã¿ã€ãã®æ©èœã䜿çšããŠãå€æŽå¯èœãªmoment
ãã¡ã¯ããªã®ãããã¿ã€ãæ¡åŒµã§ããå¯èœæ§ããããŸããã代ããã«ã¯ããŒã³ãäœæããŸãã
ç·šéïŒ WhoopInc / frozen-momentããŸãã«ç§ãæ¢ããŠãããã®ã®ããã§ãã
@thomasvanlankveldã®é倧ãªå€æŽã¯ãã¡ãžã£ãŒããŒãžã§ã³çªå·ã®ç®çã§ãã Bowerãšnpmã䜿çšããŠãã人ã¯èª°ã§ããçŸåšã®ã¡ãžã£ãŒããŒãžã§ã³çªå·ã«åºå·ãããªãã·ã§ã³ããããŸãã ããã§ã¯äžäœäºææ§ã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸãããCDNãããããæäŸããŠããã ãã®äººãé€ããŠã¯ã ããããCDNã®momentjsã䜿çšããŠããå Žåã¯ããšã«ããæã ã©ã€ãã©ãªãæŽæ°ããããšã«ããã»ã©é¢å¿ããªãå¯èœæ§ããããŸãã
次ã®ã¡ãžã£ãŒããŒãžã§ã³ïŒãŸãã¯ãã®åŸã®ã¡ãžã£ãŒããŒãžã§ã³ïŒã§äžå€æ§ãæã€ããšã¯ãããŒããããäžã«ããã¹ãã ãšç§ã¯äž»åŒµããŸãã
ã ããç§ããã®åé¡ã«ééããããã§ãã
http://stackoverflow.com/questions/33002430/moment-js-formatting-incorrect-date
ã§ããããç§ã¯å šé¢çã«äžå€æ§ãæ±ããŠããŸãã
+1äžå€æ§ã®å Žå
ãã®é©ãã¹ãäºæ³å€ã®è¡åã«ã¡ããã©å€ã倱ã£ãã
æ確ã«ããããã«ã察å¿ããã¡ãžã£ãŒããŒãžã§ã³ã®å€æŽã䌎ãäžå€æ§ã®å¥ã®+1ã
+1äžå€æ§ã®å Žå
å®å
šãªäžå€æ§ã®å Žåã¯+1ã
ãæã
å€æŽå¯èœãæã«ã¯äžå€ãã®ããã«å€±ãããæéã®åèšéã¯ããªã倧ããã«éããããŸããã
ãããç§ã¯çå£ã«æå³ããŸãã æ¥æã©ã€ãã©ãªã§ã®ããã©ãŒãã³ã¹ãæ°ã«ããã®ã¯èª°ã§ããïŒ ã®ããã«..æ¬åœã«ïŒ 99.9ïŒ ã®ãŠãŒã¶ãŒã¯ããªã¢ãŒãã§ãåªããããã©ãŒãã³ã¹ãå¿ èŠãšããããšãäœãããŠããªããšæããŸãã éåžžã2ã3ã®æ¥ä»ããŸãã¯ææªã®å Žåã¯æ°çŸã®æ¥ä»ãåŠçããŸãã 1ç§ãããæ°çŸäžã®æ¥ä»ãåŠçããŠããå°æ°ã®ãŠãŒã¶ãŒã¯ãæé©åãããå¯å€APIãã€ã³ãã䜿çšã§ããŸãã
äžå€æ§ã¯å¯äžã®æ£ããèšèšäžã®éžæã§ãã äžå€åã䜿çšããããã°ã©ãã³ã°ã¯ãå¯å€åã䜿çšããå Žåããããã°ãçºçãã«ããããšã瀺ãããã€ãã®ç 究ããããŸãã
äžå€æ§ã®å Žåã¯+1ã ããã«ã¯æ°æéããããŸããã
åé¡ã®äžéšã¯ã .startOf()
ãããªã¡ãœããåããåºã«ãªããªããžã§ã¯ãã®å€æŽãæå³ããªãããšã§ãã
ç§ã¯Momentã§ããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ã¶ã€ãã£ãã®ã§ããããæã çºçããå¯èœæ§ãããããšãä¿èšŒã§ããŸãã
ãã ããäžå€ã®ã¢ãŒã¡ã³ããæ¬è³ªçã«å¹çãäœããªããšã¯ç¢ºä¿¡ããŠããŸããããŸããããããããå¹ççã«ãªãããã€ãã®ã±ãŒã¹ãæ³åããããšãã§ããŸãã
ãã®è°è«ã¯ãã£ãšåã«Javaã®äžçã§è§£æ±ºãããŸããã äžå€ã®æ¥ä»ãåã¡ãæã人æ°ã®ããå®è£ ïŒJodaTimeïŒãæçµçã«Java8ã®æšæºã©ã€ãã©ãªã®äžéšã«ãªããŸããã
Java 8ã®LocalTime
ã®äœæ¥ã¯ãããªãç§ãã¡ã¯_åžžã«_ãããããªãã£ãã®ã§ããïŒã ç¬éã ãã¯ãããžãŒãäŒéããããšã¯ãã£ãã«ãããŸããããæ£çŽãªãšãããå€æŽå¯èœãªæ¥ä»ãªããžã§ã¯ãã®å©ç¹ã¯ããããŸããã
ã ããããã....ãããã®ã¹ã¬ããã+1ã§æº¢ããã®ã¯å«ãã§ãããåé¡ã®çå®ã¯ãMomentãäœæããªãå Žåãä»ã®èª°ããäžå€ã®JSæ¥ä»ã©ã€ãã©ãªãäœæããããšããŠãããšããããšã§ãã
ç§ã¯æè¿ãJodaTime APIã®å€ãïŒã€ãŸããJava 8ã®æ¥ä»ïŒãJSã«ç§»æ€ããããšãç®çãšããæ°ããnpmã¢ãžã¥ãŒã«ã«åºããããŸããã
ããã«ãããäžå€æ§ãLocalDateãLocalTimeãªã©ãããŒããšãã©ãŠã¶ã«ããããããŸãã
ãããã®æŠå¿µãJavaã§äœ¿çšããããšã§ãä»ã®ãã¹ãŠã®æŠå¿µã¯åä»ã§ãã°ãçºçãããããªããŸãã
ãªã³ã¯ïŒ
éã2015幎12æ11æ¥ã«ã¯ãååŸ4æ30åã¢ã³ããªã¥ãŒSchmadel [email protected]
æžããŸããïŒ
ç§ã¯æè¿ãã®å€ãã移æ€ããããšãç®çãšããæ°ããnpmã¢ãžã¥ãŒã«ã«åºããããŸãã
JodaTime APIïŒã€ãŸããJava 8ã®æ¥ä»ïŒããJSãžãããã«ãããäžå€æ§ãLocalDateãLocalTimeãªã©ã
ããŒããšãã©ãŠã¶ãJavaã§ãããã®æŠå¿µã䜿çšããåŸãä»ã®ãã¹ãŠã¯åä»ãªæããããŸã
ãã°ãçºçãããããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/moment/moment/issues/1754#issuecomment-163964349 ã
ãããŒã
ïŒã¢ãã€ã«ã§å
¥åãç°¡æœããèšãèš³ïŒ
ãŸã ãã£ã€ã ã鳎ãããŠããªãã®ã§ãã¢ãŒã¡ã³ã3.0ã§ã¯äžå€æ§ãæ¯æããŠãããšã ãè¿°ã¹ãŠãããŸãã äž»ãªçç±ã¯ã moment
ãããªãªããžã§ã¯ãã_
ããã©ãŒãã³ã¹ã«å€§ããªææããã£ããšããŠããããã¯æ£ããããšã§ãã ã¢ãŒã¡ã³ãã¯ä»ã®äººã®ãã¶ã€ã³ã«èªç¶ã«ãã£ããããå¿ èŠããããŸãã çŽæçãªAPIã¯ããã©ãŒãã³ã¹ãããåªããŠããããã¥ãŒããŒã·ã§ã³ã¯å€ãªããžã§ã¯ãïŒIMHOïŒã§ã¯çŽæçã§ã¯ãããŸããã
ãŸããmoment 3.0ã¯Date
ãªããžã§ã¯ããžã®äŸåé¢ä¿ãåé€ããå¿
èŠããããšæããŸãããããã¯å¥ã®ã¹ã¬ããã«ã€ããŠã®è°è«ã§ãã
ããã§@ mj1856ã«å®å šã«åæããŸãã
ç§ã¯ç¬éã€ã³ã¹ã¿ã³ã¹ã§Object.freeze
ã䜿çšããŠããŸããããããã¯äžè¬çã«ç§ãå¿
èŠãšããŠãããã®ãéæããŸããã ãã ãã次ã®ããšã倱æããããšãããããŸããã
let now = Object.freeze(moment());
if (now.isSameOrBefore(anotherTime)) { // throws exception
}
äŸå€ïŒ
TypeError: Can't add property _isValid, object is not extensible
at valid__isValid (C:\git\quick-test\node_modules\moment\moment.js:93:24)
at Moment.moment_valid__isValid [as isValid] (C:\git\quick-test\node_modules\moment\moment.js:2195:16)
at Moment.isSame (C:\git\quick-test\node_modules\moment\moment.js:1945:44)
at Moment.isSameOrBefore (C:\git\quick-test\node_modules\moment\moment.js:1962:21)
ãããä¿®æ£ããŠãå¿
èŠãªãšãã«Object.freeze
ã䜿çšã§ããããã«ããããšã¯ã§ããŸããïŒ
@wmertensããã ãšæããŸãïŒ //github.com/pithu/js-joda
@ ichernev ã @ mj1856 ãç§ã¯ãã°ããã®éã³ã¢éçºã«é¢äžããŠããããäžå€æ§ãããªãéèŠãªé¢å¿ãæã£ãŠããã®ã§ã以åã®ã¹ã¿ã³ã¹ãæ€åããŠããŸãã
ããã«å¯Ÿããå¯äžã®ãããã«ãŒã§ãããã©ããã¯ããããŸãããã3.0ã§äžå€æ§ã䜿çšããŠåé²ããããšã¯å¿«é©ã§ãã
@ gabrielmaldi @ wmertensããã ããã ãã§ããã å¢çç·ã«äžè²«æ§ã®ãªãã³ã¡ã³ãããè©«ã³ããŸã-éäžã§æžãããæçš¿ã®[éä¿¡]ãã¿ã³ãã¯ã£ãããšã¯ãªãã¯ããŸããã
ç§ã®ã°ãã°ããªèãã®ããã€ãããŸãšããããã«ïŒ
äžå€æ§ã®å Žåã¯+1ãçµæãšããŠåŸããããµããŒã³ãŒãã
ããã¯å€§ããªåªåã«ãªãã§ããããããã§ãããå®çŸããã§ãããïŒãããŠããããŠããïŒäººã ã«å¿ããæè¬ããŸãã
ã¢ãŒã¡ã³ãã¯ååã«åºã䜿çšãããŠããã®ã§ã @ butterflyhugã®https://github.com/WhoopInc/frozen-momentãšåæ§ã«å®è£ ãããŠãããšä»®å®ãããšã次ã®ãããªãã®ã䜿çšããã®ãå®çšçã ãšæããŸã
3.xïŒãªãã·ã§ã³ãšããŠäžå€ã§ãããã©ã«ãã¯falseã§ãããã°ããŒãã«ã¢ãŒã¡ã³ããšã¯ã¹ããŒãã«trueã«èšå®ããããã©ã°ãèšå®ãããŠããŸãã ã©ã€ãã©ãªã®ããŒãæã«console.warnïŒéçºã¢ãŒãïŒ
4.xïŒãªãã·ã§ã³ãšããŠäžå€ãããã©ã«ãã¯trueããã©ã°ã¯åŒãç¶ãfalseãšããŠèšå®ã§ããŸãã console.warn 5.xã®ã¹ã±ãžã¥ãŒã«ã«ã€ããŠïŒéçºã¢ãŒãã§ïŒ
5.xïŒå¯äžã®æ¹æ³ãšããŠäžå€
é·æçãªäžå€æ§ã®ããžã§ã³ã説æããããŒãžãåãã£ãŠäžå€®ã«é 眮ããŸããããšãã°ãç§ãã¬ã€ã¢ãŠããã3.x / 4.x / 5.xã®ã¢ãŠãã©ã€ã³ã«æ²¿ã£ãŠå¹Žã«1åã®ã¡ãžã£ãŒãªãªãŒã¹ãè¡ããŸããããã§ã劥åœãªãã®ã«ãªããšæããŸãã圱é¿ãåãã人ãã³ãŒããæŽæ°ããããã®éé¡ã
ããã€ãã®èŠ³å¯ïŒ
ãšã¯ãããfrozen-momentã䜿çšããŠãããšãã«äººã ãèŠã€ãããã°ã®ä¿®æ£ãåãã§ãæäŒãããŸãããããã®ãã°ãç§ã®ãã®ã§ãããã©ããããŸãã¯ã¢ãŒã¡ã³ããäžå€ã«ãªãå¯èœæ§ãèæ ®ããŠããªãã£ãå¥ã®ã¢ãŒã¡ã³ããã©ã°ã€ã³ã«ãããã©ããã¯é¢ä¿ãããŸããã åçµããç¬éã«åé¡ãæåºããã ãã§ãèŠãŠãããŸãã ãããŠãç§ã¯ãŸã ãåã£ãç¬éã®ãããªãã®ã«é¢ããã³ãã¥ããã£ã®åªåããäžå€ã®ç¬éãžã®ç§»è¡ã®çã¿ãç解ããç·©åããã®ã«åœ¹ç«ã€ãšæããŸãã
clone()
å Žåããã®å¯å€ã©ãããŒã¯ä»£ããã«ãå
éšåç
§ãæ°ããäžå€ã¢ãŒã¡ã³ãå€ã«æé»çã«å€æŽããŸãã ããã¯ã倧èŠæš¡ãªã³ãŒãããŒã¹ã§ã¢ãŒã¡ã³ãã䜿çšãã人ã
ã®ç§»è¡ã容æã«ããã®ã«ã圹ç«ã¡ãŸãã@ butterflyhug-åçµãããç¬éãæ§ç¯ããŠãããŠããããšãïŒ ãããèŠã€ãããšãã¯è奮ããŸãããããµããŒããåé€ãããå Žåãäžå€ã®ç¬éããå¯å€ã®ç¬éã«å€æŽããããšã¯ç§ã®ã³ãŒãã§å€§ããªä»äºã«ãªãããšãèãããšããããžã§ã¯ãããåçµã¢ãŒã¡ã³ããžã®äŸåé¢ä¿ãå°å ¥ããããšãå¿é ããŸããã ããªãã®ç®æšããã£ãŒãããã¯ãåŸãããšã§ãããããªãããããç©æ¥µçã«ãµããŒãããŠãããªããç§ã¯ãããããã®ãããå¿«é©ã§ãã :-)
ä»ã«äœäººã®äººãåãæèããã»ã¹ãæã£ãŠããã®ãããããŸããã
ããã®äººã
ããããã©ãŒãã³ã¹äžã®çç±ããã Date
ãªããžã§ã¯ããžã®äŸåé¢ä¿ãå£ãïŒãŸãã¯ããçš®ã®é
延è©äŸ¡ãè¿œå ããïŒãšããæŠå¿µãšäœµããŠäžå€æ§ã調æ»ããå¿
èŠããããšèããŠãããã©ããèå³ããããŸãã
@schmodãäžåºŠã«äžæ©ãã€ç©äºãé²ããããšããå§ãããŸãã ããã¯ãã§ã«ïŒæããã«ïŒå€§ããªå€åã§ã
@RobertMcCarterãããäžå€æ§ã®ãªãã·ã§ã³ãã³ã¢ã©ã€ãã©ãªã«å®è£ ãããªãéããäºèŠå¯èœãªå°æ¥ã«åçµã¢ãŒã¡ã³ãããµããŒãããããšãèšç»ããŠããŸã-äž»ã«ãç§ãæåŸ ããããã€ãã®ããšã«å人çã«äœ¿çšããŠããããã§ããã°ããç¶æããŸãã ãšã¯èšããã®ã®ãç§ã®ãŠãŒã¹ã±ãŒã¹ã¯Momentãšã³ã·ã¹ãã å šäœã«åã¶ããã§ã¯ãªãã®ã§ãä»ã®äººã ããã®ãã£ãŒãããã¯ãšäœ¿çšæ³ãå©çšããŠãäœãéèŠããç¹å®ããŸãã
æåã«endOfïŒïŒã䜿çšããåŸãã¢ããªã§äœãèµ·ãã£ãã®ããç解ããã®ã«30åè²»ãããåŸãäžå€æ§ã®+1ã ããã¥ã¡ã³ãã泚ææ·±ãèªãã§ããªãã£ãã®ã¯ç¢ºãã§ããããã®ååã®ã¡ãœããã¯ãããšãã°æã®çµãããè¿ããã¢ãŒã¡ã³ãã€ã³ã¹ã¿ã³ã¹ã¯åœ±é¿ãåããªããŸãŸã«ãªããšæ³å®ããŸããã æ£çŽãªãšãããããã¯é©ãã§ãããããããã®ããã«èµ·ãããªãããšã¯ã°ãããŠãããšæããŸãããããã¯ãç§ã®æèŠã§ã¯ãã»ãšãã©äžå€ã®APIãæã€ããšã®å€§ããªã¡ãªããã«é ãæ £ããããŠãããããããŸããã
äžå€æ§ã®+1 :)
ç§ã¯äžå€æ§ãæ°ã«ããŸããããã®åªããã©ã€ãã©ãªãæŸã£ãŠãããŠãã ããïŒ
@ es6Testäžå€æ§ã«åæã§ããªãçç±ã¯äœã§ããïŒ å€åãžã®æµæ以å€ã«å ·äœçãªçç±ã¯ãããŸããïŒ
+1
ç§ã®ã³ãŒãã.cloneïŒïŒã¡ãœããã§ãã£ã±ãã§ãæã
å¯å€æ§ããã°ãèŠã€ããã®ãéåžžã«é£ããå Žåãã©ã€ãã©ãªãäžå€ã§ããã°ãã©ã€ãã©ãªã®äœ¿çšã容æã«ãªããšæããŸãã
+1ãé¡ãããŸãããã£ãšäžå€æ§^ _ ^
@danpantryããã«ããã€ãã®ã¢ããªãäœã£ãåŸãæ°ãå€ãã£ãã ç§ã¯äžå€æ§ã奜ã¿ãŸãã
ãããããŸã ããã€ãã®å€æ°ãå€æŽå¯èœã«ãããã®ã§ãç¬éã«æ¥ãè¿œå ãããããšããããããçµæãä¿æããããã«ããã«å€æ°ãäœæããå¿ èŠã¯ãããŸããã
@ es6Test _æ¬åœã«_å«ããªå Žåã¯let
䜿çšããŸããïŒ
let date = moment()
// with immutability
date = date.add(5)
ç§ãäžå€æ§ã«è³æã§ãã ãããPythonã®datetime
ã©ã€ãã©ãªã®1ã€ã®æ©èœã§ããããããæ¬åœã«èŒããŠããŸãã æååã®å Žåãšåãããã«ããªããžã§ã¯ããå€æŽããããšãå¿é
ããã«ãªããžã§ã¯ããæããããšãã§ããŸãã
React / Reduxã®äžçã§ã¯ãäžå€æ§ãéåžžã«éèŠã§ãã ç¬éã¯æ¬è³ªçã«äžå€ã§ã¯ãªãã®ã§ãç§ã¯ãã§ã«ããã€ãã®åä»ãªåé¡ã«ééããŸããã ããã©ãŒãã³ã¹ã¯è»œæžã§ãããããããã§ã¯é¢ä¿ãããŸããã Facebookã®ImmutableJsã©ã€ãã©ãªã¯ãããã©ãŒãã³ã¹ãç ç²ã«ããããšãªãäžå€ãå®è¡ã§ããããšã蚌æããŠããŸãã
ãŸããäžå€æ§ã«ã€ããŠããã£ãš+1ããŸãã ãããŸã§ã¯äžå€æ§ã®ã¡ãªãããåŸãããªããããéäžã§ãã£ãŠãæå³ããããŸããã
äžå€æ§ãšé¢æ°åããã°ã©ãã³ã°ã¯ãããŸã§ä»¥äžã«äœ¿çšãããŠããŸãïŒãããŠç§ã¯ããã倧奜ãã§ãïŒã ç§ã¯ãã®ã€ãã·ã¢ããã«è²¢ç®ããããã«ç§èªèº«ã®æéãæäŸããŸãã å¯çš¿è ã¯ç§ã«é£çµ¡ããŠãç§ãã©ã®ããã«å©ãã«ãªãããšãã§ããããç¥ãããŠãã ããã
ç§ãã¡ãéåžžã«èå³ãæã£ãŠããã®ã§ãããŒã ã¯ããã«ã€ããŠææ°æ å ±ãæäŸããããšæããŸããã
çŸæç¹ã§ãç§ãã¡ã¯ããªãã®æžå¿µãèããããšãç¥ã£ãŠã»ããã ã¡ã³ããããŒã å šäœããã©ã€ãã©ãªããŒãããäœæããå Žåã¯ãã©ã€ãã©ãªãäžå€ã«ããããšãéžæããããšã«åæããŸãã ããããããã¯ä»ã®ãšããã§ã¯ãããŸããã
çŸç¶ã§ã¯ãæã«400äžã®NPMããŠã³ããŒãããããä»ã®ãã£ãã«ãä»ããŠç¬éãååŸããããšã«äŸåããŠãããŠãŒã¶ãŒã®æ°ã¯æ°ãåããŸããã ãããã®ãŠãŒã¶ãŒã¯ãã¹ãŠãä»æ¥ã®ããã«ã¢ãŒã¡ã³ããå€æŽå¯èœã§ããããšãæåŸ ããã³ãŒããæã£ãŠããŸãã ããã«ãã¢ãŒã¡ã³ããå€æŽå¯èœã§ããããšã«äŸåããå€ãã®ãã©ã°ã€ã³ããããŸãã
ã³ãŒããæžãã®ã¯ç°¡åã§ããããã®çš®ã®å€æŽã®ãµããŒãããŒãºã¯ãç§ãã¡ã®æãªæéã«ãããè¡ãå°ããªããŒã ãšããŠåŒãåããã®ã¯å°é£ã§ãã ããã¯èšã£ãŠããç§ãã¡ã¯ãããæ€èšããçšæããããŸãã ããããç§ãã¡ã¯çåã«æã£ãŠããŸãïŒ
ããªãŒãºã¢ãŒã¡ã³ããã©ã°ã€ã³ã®åé¡ã¯ããªããã¢ãŠãã§ã¯ãªããªããã€ã³ã§ãããšããããšã§ãã æ¯æ¥
momentïŒïŒãäžå€ã«ããã«ã¯ã.freezeïŒïŒãå¿
èŠã§ãã
äžå€æ§ã®èŠç¹ã¯ããªããžã§ã¯ãXãããå Žåããããç¥ã£ãŠãããšããããšã§ãã
æ瀺çã«å€æŽå¯èœã«ããªãéããå€æŽããŠãäžæµžéæ§ã§ããå¿
èŠããããŸãã
ãªãã§ãªããžã§ã¯ããå
éšçã«å€æŽã§ãããããªãã¯é¢æ°
æ瀺çãªå¯å€æ§ã«ã¯åé¡ããããŸãã
1ã€ã®åé¿çã¯ãããã€ãã®ããšãè¡ãããšã ãšæããŸãã
ã¿ããªãæºè¶³ããããšæããŸãã ã©ãæããŸããïŒ
12:11ææã2016幎5æ23æ¥ã«ã¯ããã®ãŒã»ãã€ã³ã[email protected]
æžããŸããïŒ
ç§ãã¡ãããããæã£ãŠããã®ã§ãããŒã ã¯ããã«ã€ããŠã®ææ°æ å ±ãæäŸãããã£ã
èå³ãçŸæç¹ã§ãç§ãã¡ã¯ããªãã®æžå¿µãèããããšãç¥ã£ãŠã»ããã NS
ã¡ã³ããããŒã å šäœããã©ã€ãã©ãªã
æ ¹æ¬çã«ãç§ãã¡ã¯ãããäžå€ã«ããããšãéžæããŸãã ããããããã¯æ¹æ³ã§ã¯ãããŸãã
ä»ã§ããçŸç¶ã§ã¯ãæã«400äžåã®NPMããŠã³ããŒããããã
ä»ã®äººãä»ããŠç¬éãååŸããããšã«äŸåããŠããæ°ãåããªãã»ã©ã®æ°ã®ãŠãŒã¶ãŒ
ãã£ãã«ã ãããã®ãŠãŒã¶ãŒã¯ãã¹ãŠãã¢ãŒã¡ã³ãã次ã®ããã«å€æŽå¯èœã§ããããšãæåŸ ããã³ãŒããæã£ãŠããŸãã
ä»æ¥ã§ãã ããã«ãç§ãã¡ã¯ç¬éã«äŸåããŠããå€ãã®ãã©ã°ã€ã³ãæã£ãŠããŸã
å€æŽå¯èœãã³ãŒãã¯æžãã®ã«ååç°¡åã§ããããã®çš®ã®ãµããŒãã®å¿ èŠæ§
ç§ãã¡ã®ã¹ãã¢ã§ãããè¡ãå°ããªããŒã ãšããŠå€æŽãè¡ãããšã¯å°é£ã§ã
æéã ããã¯èšã£ãŠããç§ãã¡ã¯ãããæ€èšããçšæããããŸãã ããããç§ãã¡ã¯çåã«æã£ãŠããŸãïŒ
- åçµã¢ãŒã¡ã³ããã©ã°ã€ã³ãããŒãºãæºãããªãã®ã¯ãªãã§ããïŒ
- äžå€ã®APIïŒåžžã«
ã¯ããŒã³ïŒããŸãã¯äœããã®çç±ã§å éšçã«æ¬åœã«å€ç°ããªãããã«ããå¿ èŠããããŸããïŒ
ãªããžã§ã¯ãïŒ- çŸåšã®ã³ãŒãã«2çªç®ã®äžå€ã®APIãè¿œå ãããšã
ããŒãºïŒâ
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/moment/moment/issues/1754#issuecomment -221062274
Gmailã¢ã«ãŠã³ãã®EricLauã
@maggiepintã«è¿ä¿¡ããŠããã ãããããšãããããŸãã
start = moment();
end = start.add(10, 'minutes');
import "moment/immutable";
start = moment();
end = start.add(10, 'minutes'); // immutable version of add
ç§ã®æèŠã§ã¯ããã®ã¢ãããŒãã¯ãäžå€ã®APIã䜿çšããã人ã«ãšã£ãŠã¯åªé ãªã¢ããã°ã¬ãŒãã«åœ¹ç«ã¡ãŸããæ¢åã®ã³ãŒãã¯åŒãç¶ãæ©èœãã匷å¶ãããããšã¯ãªããäžå€ã®APIã䜿çšããã人ã«ãšã£ãŠã¯å€æŽãå°ãªããŠæžã¿ãŸãã
ç§ãã¡ã¯ãã³ãŒãã®å¯äœçšããªãããšããããããæå³ãæã£ãŠããŸãã åºæ¬çãªãã¿ãŒã³ã¯ãçŸåšã®é¢æ°ã«ããã¯ãããããã«cloneãåŒã³åºãããŠããããã®ã¯ããŒã³ãæäœããããšã§ãã
ãã ããæè¡çã«ã¯ãçã«äžå€ã®ã³ãŒããäœæããå Žåããªããžã§ã¯ãã¯å€æŽãããªãå€ã§æ§ç¯ããå¿ èŠããããŸãã ãã ãããããããšããã®å€æŽãè¡ãã®ãé£ãããªããŸãã ã¯ããŒã³ãåŒã³åºããŠã以åãšåãããã«å®è¡ããæ¹ãã¯ããã«ç°¡åã§ãã
ç§ã¯ããªã¥ãŒã®èãã2çªç®ã«ããŠããŸãã
import "moment / immutable";
start = momentïŒïŒ;
end = start.addïŒ10ã 'å'ïŒ; // addã®äžå€ããŒãžã§ã³
ããã¯äžå€ã®ãªããã¢ãŠãã§ãããå€æŽããªãã®ã§ãããã¯çŽ æŽãããããšã§ã
é¢æ°åã
12:53ææã2016幎5æ23æ¥ã«ã¯ããã®ãŒã»ãã€ã³ã[email protected]
æžããŸããïŒ
ç§ãã¡ã¯ãã³ãŒãã®å¯äœçšããªãããšããããããæå³ãæã£ãŠããŸãã åºæ¬
ãã¿ãŒã³ã¯ãçŸåšã®é¢æ°ã«ããã¯ããã¯ããŒã³ãåŒã³åºãããããšã§ãã
次ã«ããã®ã¯ããŒã³ãæäœããŸãããã ããæè¡çã«ã¯ãçã«äžå€ã®ã³ãŒããäœæããŠããå Žåããªããžã§ã¯ãã¯
å€æŽãããªãå€ã§æ§ç¯ããå¿ èŠããããŸãã ããããããšã§
ãã ãããã®å€æŽãè¡ãéã®é£æ床ãäžããŸãã ããã¯ã¯ããã«ç°¡åã§ã
cloneãåŒã³åºããŠãåã«è¡ã£ãŠããããšãå®è¡ããŸããâ
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/moment/moment/issues/1754#issuecomment -221076796
Gmailã¢ã«ãŠã³ãã®EricLauã
@ ericlau-åºäœ
- ã°ããŒãã«momentïŒïŒèšå®ããããäžå€ã¢ãŒãã«èšå®ãããŠããå Žåã¯ããã¹ãŠ
äœæãããmomentïŒïŒã€ã³ã¹ã¿ã³ã¹ã¯äžå€ã§ãããå¯å€åŒã³åºããè©Šè¡ãããå Žåã
å€æŽããã代ããã«äžå€ã䜿çšããããã®é©åãªã¡ãã»ãŒãžã§ãšã©ãŒãçºçããŸã
APIåŒã³åºãã
ããŒãžäžã®2ã€ã®ã©ã€ãã©ãªãç°ãªãç¬éã®åäœãäºæããŠããå Žåãããã¯æ©èœããªããªããŸãã ããšãã°ãå€æŽå¯èœãªç¬éãæåŸ ããdatepickerã䜿çšããç¬èªã®ã³ãŒãã¯äžå€ã®ç¬éãæåŸ ããŸã-ããã¯æ©èœããŸããã
äžå€ã®APIãæã£ãŠããïŒåçµããç¬éïŒ
ãã©ã°ã€ã³ãæ©èœããªãããããããå®ç§ã§ã¯ãããŸããã å®éã«ã¯ãäžå€æ§ãå°å ¥ããæ¢åã®ãã¹ãŠã®ãã©ã°ã€ã³ãæ©èœããç¶ããæ¹æ³ã¯ãããŸããã ãã©ã°ã€ã³ã¯ã誰ãããã©ã°ã€ã³ãæ©èœãããããã«æéãè²»ããåã«ããŸã£ããæ©èœããªãããäžå€ã®ç¬éã§æ©èœããŸããã
import "moment / immutable";
ãããã£ãŠãããã¯åºæ¬çã«ãåæ§ã®ã€ã³ã¿ãŒãã§ã€ã¹ãæã€å¥ã®ã©ã€ãã©ãªãææ¡ããŠããŸãã 確ãã«ãã³ãŒããå£ãããšã¯ãããŸããããæ··ä¹±ãåŒãèµ·ãããäžéšã®ãããžã§ã¯ãã«2ã€ã®ããŒãžã§ã³ãã€ã³ã¹ããŒã«ãããŠããå¯èœæ§ããããŸãïŒããšãã°ãdatepickerã¯å€æŽå¯èœãªããŒãžã§ã³ãåããã³ãŒãã¯äžå€ã®ããŒãžã§ã³ãåããŸãïŒã
æè¯ã®ãªãã·ã§ã³ã¯ãçŸåšã®APIãšã»ãŒåãããã«ããã ãäžå€ã®ãªããžã§ã¯ãã䜿çšããŠAPIãäœæããããšã§ãã ãã©ãŒã¯ãæ£åžžã§ããå¯èœæ§ããããŸãã çµå±ã®ãšããããããèªç±ãœãããŠã§ã¢ã®ããæ¹ã§ãã
éçºè
ã¯ã³ãŒãã段éçã«ã¢ããã°ã¬ãŒãã§ãããããã2ã€ç®ã®APIãè¿œå /ãµãã¢ãžã¥ãŒã«ãå
¬éããããªãã·ã§ã³ã¯äºææ§ã®ããã«æé©ã§ãã å¯èœã§ããã°ã moment()
ã®æå³ïŒã¢ãžã¥ãŒã«ã©ã³ãã®import moment;
ããŸãã¯ãã©ãŠã¶ãã«ãã®moment
ã°ããŒãã«çµç±ïŒã¯ãŸã£ããå€æŽãããªãã¯ãã§ããããã«ããããã®ã¬ã¬ã·ãŒã³ãŒãã
IMOã次ã®ããšãå¯èœã«ãããœãªã¥ãŒã·ã§ã³ãçæ³çã§ãã
import moment from 'moment';
import {immutable as immoment} from 'moment';
var a = moment(); // mutable moment
var b = moment().immutable(); // immutable moment
var c = immoment(); // also an immutable moment; shorthand
å¥ã®ã©ã€ãã©ãªã§ã¯ãããŸããããããã§ã-2ã€ã®å¥åã®ç°ãªãã¿ã€ãã®ã¢ãŒã¡ã³ãããããŸãã å¯å€ããã³äžå€ã®ã¢ãŒã¡ã³ããªããžã§ã¯ãããå éšãã§ããªãã®éã®ã³ãŒããå ±æãããšä»®å®ãããšãäž¡æ¹ã®æ§æã䜿çšããå¿ èŠãããéçºè ã«ãšã£ãŠãã©ã€ãã©ãªãµã€ãºãããã»ã©å¢ããå¿ èŠã¯ãããŸããã ã¢ããªã±ãŒã·ã§ã³ã1ã€ã®æ§æã®ã¿ã䜿çšããå ŽåãããªãŒã·ã§ã€ã¯ã䜿çšããŠæé©åããããã«ããçæã§ããŸãã
ã©ã€ãã©ãªããã©ãŒã¯ãããšãã»ãšãã©ã®éçºè ãããŒãããå¿ èŠã®ããã³ãŒãã®ãµã€ãºã2åã«ãªãå¯èœæ§ããããããã¯ã»ãšãã©ã®Webã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠæãŸãããããŸããã
ãã©ã°ã€ã³ããç®±ããåºããŠãäžå€ã®ç¬éã§åäœãããšæ³å®ããã®ã¯è¯ãèãã§ã¯ãªããšæããŸãããŸãããããåççãªèŠä»¶ã§ãããšã¯èããŠããŸããã
ãŸããå¯å€APIãšäžå€APIãåäžã§ããããšãåççãªèŠä»¶/ä»®å®ã§ã¯ãªããšæããŸãã ã¢ããã°ã¬ãŒããã¹ãã§ããã ãã¹ã ãŒãºã«ããããã«åªããå¿ èŠããããŸãããåä»ãªæ§æã«çžãããã¹ãã§ã¯ãããŸããã
ãŸãããäžå€ãAPIãã©ã®ããã«èŠãããã«ã€ããŠã¯è°è«/è°è«ã®äœå°ããããããããšæããŸãã ãã«ããŒãã¿ãŒã³ïŒ ã³ã³ã¹ãã©ã¯ã¿ãŒã®ã€ã³ã¹ã¿ã³ã¹åïŒ å€ãªããžã§ã¯ãïŒ çŸåšã®APIãå®è£ ããŸãããã¯ããŒã³ãè¿ããã»ãã¿ãŒãã¡ãœããã¯ãããŸããïŒ
ç§ã®1ã€ã®èŠæ±ã¯ãæ°ããAPIããã©ã®ãããªç¬éãæ±ã£ãŠãããã«ã€ããŠæ確ãã€æ確ã«ããå¿
èŠããããšããããšã§ãã IMOã freeze
ã¯ãã®ãã¹ãã«å€±æããç§ãäžç¬ãéãããã³ã«clone()
ãåŒã³åºã以å€ã«ã»ãšãã©ä¿è·ãæäŸããŸããã
ãããã£ãŠãããã¯åºæ¬çã«ãåæ§ã®ã€ã³ã¿ãŒãã§ã€ã¹ãæã€å¥ã®ã©ã€ãã©ãªãææ¡ããŠããŸãã 確ãã«ãã³ãŒããå£ãããšã¯ãããŸããããæ··ä¹±ãåŒãèµ·ãããäžéšã®ãããžã§ã¯ãã«2ã€ã®ããŒãžã§ã³ãã€ã³ã¹ããŒã«ãããŠããå¯èœæ§ããããŸãïŒããšãã°ãdatepickerã¯å€æŽå¯èœãªããŒãžã§ã³ãåããã³ãŒãã¯äžå€ã®ããŒãžã§ã³ãåããŸãïŒã
åå¥ã®ã©ã€ãã©ãªã§ã¯ãªããåãã©ã€ãã©ãªã®ã¹ãªã ãªã©ãããŒã§ãã ã€ã³ã¹ããŒã«ããå¿ èŠãããã®ã¯ãmomentã®1ã€ã®ããŒãžã§ã³ã ãã§ãã ãmoment / immutableããã€ã³ããŒãã§ããdatepickerã¯åããããžã§ã¯ãã§ãmomentããåé¡ãªãã€ã³ããŒãã§ããŸãã
äžå€ã®ç¬éãåŠçããããã«æŽæ°ãããŠããªãå Žåãç¬éãåã蟌ãã ãè¿ããããããã©ã°ã€ã³ãšã®ã€ã³ã¿ãŒãã§ãŒã¹ã«åé¡ãããå¯èœæ§ããããŸãã
ãã©ã°ã€ã³ã«äžå€ã®ç¬éãæž¡ãããšããŸãããããã©ã°ã€ã³ã¯çŸåšããããå¯å€ãšããŠæ±ããŸãã ãã©ã°ã€ã³ãæŽæ°ããããŸã§ããã©ã°ã€ã³ã«ç¬éãäžããããåã«ãå¯å€ã«å€æããæ¹æ³ãå¿ èŠã«ãªããŸãã çæ³çã«ã¯ããããžã§ã¯ãã®ã¡ã³ãããäžå€æ§ããµããŒãããããã«æéãå²ããåŸãéæšå¥šã«ãªããŸãã ãããããäžå€æ§ãæ€åºããæ¹æ³ãå¿ èŠã«ãªãã§ãããïŒãã©ã°ã€ã³ã®äœæè åãïŒã
å察ã«ãäžå€ã®ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããããã«æŽæ°ããäžå€ã®ç¬éããŠãŒã¶ãŒã«è¿ãã©ã€ãã©ãªã¯ãäžå€ã䜿çšãããäžå€ã®ç¬éãæåŸ ããŠããªããŠãŒã¶ãŒãæšãŠãå¯èœæ§ããããŸãã ããã¯ãéæšå¥šã®å€ææ¹æ³ã§ãåŠçã§ãããšæããŸãã ãã©ã°ã€ã³ã¯ãæž¡ããããã®ãšåãã¿ã€ãã®ã¢ãŒã¡ã³ããè¿ãå¿ èŠããããŸãã
@maggiepintã¯ããç§ã¯ããªãã®clone
ã®ã¢ãããŒãã§å€§äžå€«ã§ãããã ç¹ã«ãããã解決ãããŠããéã
@tacomanatorãããç§ãããããããšã§ãã å
éšã§çã«äžå€ã§ããããã«ãã¹ãŠãããçŽãããšã¯ãã²ã©ãèããããŸããã
ã©ãããããã人ã
ããããæãã§ãããã©ããç§ã¯ç¥ããŸããã§ããã
@schmod freeze
ãæ確ã§æ確ãªAPIã§ãããšæããªãçç±ã«ã€ããŠç°¡åã«èª¬æããŠããã ããŸããïŒ
é¢æ°åãå¯æãããå Žåã¯ããã®ãªããžããªã®åé¡ãšããŠãFrozenMomentã®ã¡ãœããã®ååãå€æŽããããã®åŒæ°ãæ€èšããŠãã ããã äžæ¹ãå¯å€ããäžå€ã«ïŒãããŠãã®éã«ïŒå€æããããšãå¯èœã§ãããšã¯æããªãå Žåã¯ãããã§ããã€ãã®è°è«ãä¿ãå¯èœæ§ããããšæããŸã-ãã ããFrozenMomentãåãã§åãåããŸãããããããè¯ãAPIã§ãããšãã倧ãŸããªã³ã³ã»ã³ãµã¹ãåŸãããã°ããã®æ¹åã«åãã£ãŠããŸãã
@maggiepint ãçŸåšã®ã³ãŒãã«2çªç®ã®äžå€ã®APIãè¿œå ãããããåºæ¬çã«Frozen Momentã®äžéšãŸãã¯ãã¹ãŠãã³ã¢ã©ã€ãã©ãªã«ãã³ãã«ããŠãããšèªãã§æ£ããã§ããïŒ ããã圹ã«ç«ã£ãããFrozen MomentãŸãã¯ãã®ã¢ã€ãã¢ã®äžéšãïŒå ¬åŒãã©ã°ã€ã³ãŸãã¯ã³ã¢ã©ã€ãã©ãªã®äžéšãšããŠïŒã¢ãŒã¡ã³ãçµç¹ã«ç§»è¡ãããã®æ°ããã³ã³ããã¹ãã§ã®ã¡ã³ããã³ã¹ãæ¯æŽã§ããããšãããããæããŸãã
@butterflyhugããªãã¯@ichernevãäœãèããŠããããæ£ç¢ºã«èšã£ãŠããŸãã 圌ã¯ãã©ã€ãã©ãªã«ä»å±ããŠããå ¬åŒãã©ã°ã€ã³ã«åŸåããŠããŸããã ãã¶ããGitterã§ããã調æŽã§ãããããããŸããã ä»äºã§3æ¥éäžåšã«ããå¿ èŠãããããã空宀ãéãããŸãã æ®ãã®äººã¯åšãã«ããã¯ãã§ãã
@butterflyhug
freeze
ã¯è¯ãååã ãšæããŸããããã¹ãŠã®åäžã®ãç¬éã®åŒã³åºãã®åŸã«ãããã䜿çšããããšãèŠããŠããå¿
èŠãããã®ã¯æ®å¿µã§ãã
import 'moment/immutable'
ã«ãåãåé¡ããããšæããŸãããå¿ããã¡ã§ãã
æ£çŽãªãšãããããªãã¯semverããã©ããŒããŠããŸããæ£ããã¢ãããŒãã¯ããã¹ãŠãäžå€ã«_ããã©ã«ãã§_䜿çšãããã®å€æŽãç¬èªã®ã¡ãžã£ãŒããŒãžã§ã³ãšããŠãªãªãŒã¹ããäžå®æéïŒ12ãæïŒïŒåŸã«å€ãããŒãžã§ã³ããµããŒãããªãããã«ããããšã ãšæããŸãã æ°æ©èœ/ä¿®æ£ã¯ãäžå€ãšå¯å€ã®äž¡æ¹ã®ãã©ãã¯ã«ããŒãžã§ããå€æŽå¯èœãªããŒãžã§ã³ã䜿çšãããŠãŒã¶ãŒã«ç§»è¡èšç»ãæäŸãããŸãã
åè¿°ã®12ãæåŸãå€ãããŒãžã§ã³ã¯_ãŸã _æ©èœããŸãããTLCãåä¿¡ããŸããã
ãã¡ãããããã«ã¯å€ãã®ãªãŒããŒãããããããŸãããäžäœäºææ§ã®ããã«å€æŽãè©Šã¿ããããããã®å€æŽãæ£ããè¡ãæ¹ããããšæããŸãã ãŸããå€æŽãéåžžã«è€éã«ãªããã³ã¢éçºããŒã ã®é¢å¿ãèããå¯èœæ§ããããŸãã ç§ã¯ç¥ããªããã
ãã®ã¢ãããŒãã®ãã1ã€ã®æœåšçãªæ¬ ç¹ã¯ããŠãŒã¶ãŒãCDNãããã®ã¹ã¯ãªããã䜿çšããŠããŠãæ瀺çãªããŒãžã§ã³ãæå®ããŠããªãããšã§ãïŒäœããã®çç±ã§ïŒãããã«ãããäžäœäºææ§ã®ããAPIããªãªãŒã¹ãããå Žåã«ãµã€ããç Žæããå¯èœæ§ããããŸãã ãããèšã£ãããšããèšããŸããããä»ã®ãšãã蚱容ã§ãããªã¹ã¯ã§ã¯ãªããããããŸããã
åãã©ã€ãã©ãªã®2ã€ã®ããŒãžã§ã³ãããããšã¯ãã°ããŒãã«ãªããžã§ã¯ãã«äŸåããŠããå Žåã«ã®ã¿åé¡ã«ãªãã freeze()
ã䜿ãç¶ãã以å€ã«ããããåé¿ããããã®é©åãªæ¹æ³ã¯ãããŸããã
TLDRã¯ã解決ããããšããŠããåé¡ãããã§ã«äœ¿çšããŠããsemverã«ãã£ãŠè§£æ±ºãããŠããããã«èãããŸãã æ¬æ¥ããã¹ã姿ã§äœ¿ã£ãŠã¿ãŸãããïŒ å€æŽãå£ãããã®ã¡ãžã£ãŒããŒãžã§ã³ã ãããæ©èœããªãã®ã¯ãã°ããŒãã«moment
å€æ°ã«äŸåããŠããŠãCDNã䜿çšããŠããå Žåã ãã§ãããããã§å€æŽãå ãããšããšã«ããåé¡ãçºçããŸãã
ç§ã®æ祚ã¯ãsemverããã³äžå€ã®3.0ãªãªãŒã¹ã«ããããŸãã
ç§ã¯freeze
ååã«ç°è°ãå±ããŸããããç¬éãåçµãããŠãããã©ããã«ã€ããŠå®å
šãªæšæž¬ãããããšãé£ãããšããããšã¯æ¬è³ªçã«åé¡ããããšæããŸãã ïŒ Object.freeze()
ã«ãåæ§ã®åé¡ããããŸãïŒ
äžå€ã®ç¬éã¯åçµäžå¯èœã§ãã£ãŠã¯ãªãããåçµãããŠãããã©ããã«ã€ããŠçãã®äœå°ã¯ãããŸããã ããã¯ããã«ããŒãã¿ãŒã³ã®å³å¯ãªå€åœ¢ïŒã€ãŸãããªããžã§ã¯ã_only_ã.build()
ãåŒã³åºããããŸã§ã»ãã¿ãŒãæã¡ããã®åŸ_only_ãã²ãã¿ãŒãæã€ïŒãä»ããŠããŸãã¯ç¬éããåçµãããããšã§å®çŸã§ããŸããã€ã³ã¹ã¿ã³ã¹åããããã¹ãŠã®ã»ãã¿ãŒãã¯ããŒã³ãè¿ããŸãã
äŸãã°ïŒ
/* BUILDER PATTERN */
var bldr = moment.immutable()
.hours(5)
.minutes(30)
.seconds(25);
bldr.hours(); // throws exception. builder has no getters
var time = bldr.build();
time.hours(); // 5
time.hours(6); // throws, OR returns a clone
/* A more explicit variant: */
var bldr = moment.immutable()
.setHours(5);
bldr.getHours; // undefined
var time = bldr.build();
time.getHours(); // 5
time.setHours; // undefined
/* VALUE OBJECT */
var time = moment.immutable() // 00:00:00
.hours(5) // new object => 05:00:00
.minutes(30) // new object => 05:30:00
.seconds(25); // new object => 05:30:25
/* Same thing, but more efficient: */
var time2 = moment.immutable(5,30,25); // 05:30:25
time.hours(); // 5
time.hours(6); // new object => 06:30:25
æåã®äŸã¯éåžžã«Javaã«äŒŒãŠããŸãããã¢ãŒã¡ã³ããã©ã®ããã«æ§ç¯ãããããããã³ãããã䜿çšããŠäœãã§ãããã«ã€ããŠãããããŸããã¯ã»ãšãã©ãããŸããã ãŸãããªãŒããŒããããã»ãšãã©ãªãæ°ããã¢ãŒã¡ã³ããæ§ç¯ããããã®å¹ççã§çŽæçãªãã¹ãæäŸããã»ãšãã©ã®äººãçŸåšã©ã®ããã«ã¢ãŒã¡ã³ãã䜿çšããŠããããå³å¯ã«è¿œè·¡ããŸãã
æ§ç¯ãããã¢ãŒã¡ã³ãã®ã»ãã¿ãŒã«äŸå€ãã¹ããŒãããããšã«è³æã§ãããã®åäœã«ããããããŸãããããã«æžå°ãïŒåé·æ§ãç ç²ã«ãªããŸãïŒãéçºè ã¯æ°ããã¢ãŒã¡ã³ããäœæãããã³ã«èªèã匷å¶ãããŸãã
2çªç®ã®äŸã¯ãå€ãã®ãªããžã§ã¯ããäœæïŒããã³ç Žæ£ïŒããŠããããããªãŒããŒããããã¯ããã«å€ãããã§ãã ããããæé©åã®äœå°ã¯ãããããããŸãã ææ°ã®GCã¯ããªãåªããŠããŸãã é
延è©äŸ¡ã圹ç«ã€å¯èœæ§ããããŸãã Momentãªããžã§ã¯ããå¯èœãªéã軜éã«ããïŒåºã«ãªãDate
åé€ããïŒãªã©ïŒããã€ãã®æ¯èŒã®ããã«ããã®ãã¿ãŒã³ã¯JavaScriptã§æååãåŠçãããæ¹æ³ãšåãã§ãïŒ
ç§ã¯semverã®ãã¡ã³ã§ãããã¢ãžã¥ãŒã«ããŒããŒããªããšåãããŒãžã«2ã€ã®ããŒãžã§ã³ã®ã¢ãŒã¡ã³ããé 眮ããããšã¯äžå¯èœã§ããããããã©ãŠã¶ãŒã®ãŠãŒã¹ã±ãŒã¹ã§ã¯é倧ãªå€æŽãåé¡ã«ãªããŸãã
åã«è¿°ã¹ãããã«ãMomentã«äŸåããã¬ã¬ã·ãŒã³ãŒãããããããããŸãã å°ãªããšããã¹ã ãŒãºãªç§»è¡æéãå¯èœã«ããããã«ãäž¡æ¹ã®ãã¿ãŒã³ããµããŒããããªãªãŒã¹ãå¿ èŠã§ãã
æ°ããç¬éãè¿ãæ§æå¯èœãªã¡ãœããã®å Žåã¯+1ã ããããäžå€ã§ãããã©ããããæ°ã«ããŸããã æ§æãæããŠãã ãããã¡ãœãããé£éãããããå€æŽãããã¢ãŒã¡ã³ãã2è¡ã§ã¯ãªã1è¡ã«å²ãåœãŠããã§ããŸãã
@alexyulyãªãã¯ããŒã³ãæ©èœããªãã®ã§ããïŒ ã€ã³ã©ã€ã³ã§äœæãããå Žåã¯ã次ã®ãããªããšãã§ããŸãã
var a = moment();
var b = a.clone().subtract(1, 'week').startOf('day');
ãŸãã¯äœã§ãã
@maggiepintã°ãããŠãããšæããŸããããã£ãšã¡ãœãããäœæã§ããããã§ãã ãã³ããããããšãã ãã¶ããããããã¥ã¡ã³ãã§ããå°ãæ確ã«ããŸããïŒ äŸïŒ httpïŒ //momentjs.com/docs/#/manipulating/start -of / <-æ»ãå€ã«ã€ããŠã®èšåã¯ãããŸããã
å°ãæŽæ°-ãã®ããã°æçš¿ã¯ãçŸæç¹ã§ãã®åé¡ã«é¢ããç§ã®ç«å Žã§ãïŒ https ïŒ
ç§ã¯ããŒã ã®ä»ã®ã¡ã³ããŒã«ã€ããŠã¯è©±ããŸãããã圌ãã¯ãããèŠãŠãããç§ãã¡ã¯äžè¬çã«ç§ãã¡å šå¡ãåããããªå Žæã«ãããšèšããŸãã
@maggiepintçŽ æŽãããéåžžã«æå¹ãªãã€ã³ã
ãããããããšãã äžå€æ§ã¯reduxã®çæ§ãªã®ã§ã確å®ã«js-jodaã«åãæ¿ããŸãã ç§ã¯ãŸã çžå¯Ÿçãªæéã®ããã«ç¬éãä¿ã€ãããããŸããã
ãšãªãã¯ã©ãŠ-Gmail
2016幎6æ24æ¥éææ¥11:12 AM -0700ããMaggiePintã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
å°ãæŽæ°-ãã®ããã°æçš¿ã¯ãçŸæç¹ã§ãã®åé¡ã«é¢ããç§ã®ç«å Žã§ãïŒ https ïŒ
ç§ã¯ããŒã ã®ä»ã®ã¡ã³ããŒã«ã€ããŠã¯è©±ããŸãããã圌ãã¯ãããèŠãŠãããç§ãã¡ã¯äžè¬çã«ç§ãã¡å šå¡ãåããããªå Žæã«ãããšèšããŸãã
â
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããããã¹ã¬ããããã¥ãŒãããŠãã ããã
çªç¶å€ç°ã«ãã£ãŠåŒãèµ·ããããããã€ãã®ããå žåçãªãã°/æ··ä¹±ïŒ http ïŒ
ããã¯+1ã§ãããå®éã«ã¯Reduxã䜿çšããŠããã®ã§ãMomentã€ã³ã¹ã¿ã³ã¹ãReduxç¶æ ãªããžã§ã¯ãã«ãŸã£ããå ¥ããŠããªããããããã¯é©ãã»ã©å°ããªåé¡ã§ããããšãããããŸããã æ¥ä»æååãŸãã¯ã¿ã€ã ã¹ã¿ã³ãã®ã¿ã§ãã¬ã³ããªã³ã°ã¡ãœããã§Momentã䜿çšããŠãæ¥ä»æååãä»ã®æååã«å€æããŸãã
ç§ããããè¡ãã®ã¯ãäž»ã«ãäœåãªäœæ¥ãªãã§ç¶æ ãã·ãªã¢ã«åããã³éã·ãªã¢ã«åããã®ãç°¡åã§ããã ãã§ãªããReactãšReduxãããã¥ãŒããŒã·ã§ã³ãããŸãé ãããã§ãã
ä»é±æ«ãããã«é¢ããææ°æ å ±ãå ¥æã§ããããã«æåãå°œãããŠããŸãã èšç»ã¯ãããŸãããã³ãããããåã«ãã¹ãŠãããŸãããããšã確èªããå¿ èŠããããŸãã æ®å¿µãªãããç§ã¯æ¥é±ããã¢ããªã¹ããã·ã¢ãã«ã«ç§»åããã®ã§ãããã¯ãã°ããé ããªããããããŸããããç§ã¯ãããåé²ãããããšæããŸãã
ãã®ããã°æçš¿ããŸã ãã©ãã£ãã¯ãç²åŸããŠããããšã«æ°ä»ããã®ã§ã倧ããªæŽæ°ã«åããŠå°ããªæŽæ°ã ç§ã¯çŸåšãBabelã䜿çšããããã«momentã®ãã«ããäœãçŽããŠããŸãã ããã«ããã @ butterflyhugã®ãã©ã°ã€ã³ãã³ã¢ãªããžããªã«@butterflyhugã¯ãããã«é¢ããŠéåžžã«èŠªåã«ç§ãã¡ãå©ããŠãããŸããã ããã«ãLoDashã®John-David DaltonïŒã©ã¡ããMicrosoftã§åããŠããŸãïŒãšäŒã£ãŠãå ¬åŒãã©ã°ã€ã³ãå°å ¥ããéã®æŠç¥ã«ã€ããŠè©±ãåã£ãŠããŸãã圌ã¯ãã§ã«LoDashé¢æ°åã§ãããè¡ã£ãŠããããã§ãã é·ãããã°æçš¿ãšRFCããŸããªãç»å ŽããŸãã
@maggiepintã¯ãfrozen-momentãå ¬åŒã«ãµããŒãããŠããŸããã httpsïŒ//github.com/WhoopInc/frozen-moment/issues/20ã«å¯ŸåŠããäºå®
moment()
åŒã³åºããã³ã«ããã©ã«ãã§ããªãŒãºããç¬éãè¿ãããéçºè
ãæ¯å.freeze()
åŒã³åºãããšãèŠããŠããå¿
èŠããªãéãããã®äžå€æ§ãžã®ã¢ãããŒãã¯ååã«è¯ããšæããŸãã
@gabrielmaldiè¯ã質åã§ãã ç§ã¯RFCãæžããŠããŸãïŒä»ããã«è¡ãå¿ èŠããããŸãïŒãããã§ããäžå€ã®ã¿ã®äœ¿çšã®ããã®ããè¯ãã¹ããŒãªãŒãæäŸããããšãç§ã®æ確ãªç®æšã§ãã ç§ã®ææ¡ã¯ãéçã¡ãœãããèæ ®ã«å ¥ããŠãWhoopInc / float-momentïŒ20ã«é¢ããç§ã®ã³ã¡ã³ãã«æ²¿ã£ããã®ã§ãã RFCãªããžããªã«å¯ŸããŠPRãéããšãã«ããããšãã®å·ã«RFCãžã®ãªã³ã¯ãæçš¿ããŸãããã®æç¹ã§ãææ¡ã«å¯Ÿããã³ãã¥ããã£ã®ãã£ãŒãããã¯ãæè¿ããŸãã
RFCãã©ããã®äœæãçµäºããPRã
ãã®æ©èœããŠãŒã¶ãŒã«ã©ã®ããã«æäŸããããã«ã€ããŠæªè§£æ±ºã®è³ªåããŸã ããã€ããããããããã¯éåžžã«é·ãããã¥ã¡ã³ãã§ããããã§ãããŸããŸãªã¢ãããŒãã®é·æãšçæã匷調ããããšããŠããŸãã ããããå®è£ ã®ã¢ã€ãã¢ã¯ããªããã£ããããŠãããšæãã®ã§ãææ¡ãããŠãããŠãŒã¶ãŒåãAPIã«ã€ããŠäºçŽãããã°ãããã®äººã ããèããŠã¿ãããšæã
RFCã®ãšã°ãŒã¯ãã£ããµããªãŒãšåçãã¹ãäž»ãªè³ªåïŒ https ïŒ
@maggiepintãã®èšäºã«ã³ã¡ã³ããæçš¿ããããšããŸããããã©ãããããã飲ã¿èŸŒãŸããŸããã ãããç§ãæžãããã®ã§ãïŒ
ãããã®å€æŽã«é¢ããç§ã®æ倧ã®æžå¿µã¯ãã³ãã¥ããã£ã®äžé£ãåãã«å£°é«ã§è¡šçŸåè±ããªéšåã«å¯Ÿå¿ããããšã§ãããã®è°è«ãè¡ãããŠããããšã«ããæ°ã¥ããŠããªãéåžžã®éçºè ã®éããªé²æ³¢å €ãé¿ããŸãã
GitHubã®ã¹ã¬ããã¯ãããåºç¯ãªéçºã³ãã¥ããã£ã®çž®å³ã§ã¯ãããŸããã ãã®ãµã€ãã¯ãWebäžã®å€ãã®ãã©ãŒã©ã ãšåãåå ãã€ã¢ã¹ã«èŠããã§ãããç¹å®ã®çš®é¡ã®éçºè ã«åã£ãŠããŸãã ã¢ããªã±ãŒã·ã§ã³ãããã¢ã€ãã¢ã«èå³ãããã ãããŠãããŠç§ã¯ã瀟äŒçã«äººæ°ã®ãããã¬ã³ãã®åšãã«éãŸãåŸåããããšããèšããŸãã ãããã®éçºè ã¯ãäžå€æ§ãé¢æ°åããã°ã©ãã³ã°ãªã©ã®å²åŠçãªã³ãŒãºã»ã¬ãã¬ã«èªç¶ã«æ¹ãããä»ã®ã©ã®ã°ã«ãŒããããããªãã«è¿ã¥ããŸãã 圌ãã¯éšå±ã®äžã§æã倧ããªå£°ã«ãªãããã®å€åãå«ã¶ã§ããã-ããããããåºãäžçã¯ã©ãã§ããïŒ
ããåºãäžçã¯ãæ©èœãããã®ãæãã§ããŸãã çŸåšäœ¿çšããŠããã©ã€ãã©ãªãåŒãç¶ãæŽæ°ãåä¿¡ããããšãç¥ãããã®ã§ãããå°ãªããšããã°ä¿®æ£ã§ãããçæ³çã«ã¯ã圌ãã®ç掻ãããè¯ãããå°ããªæ®µéçãªæ¹åã§ãã ããããããã¯ããã¯èšããŸããããªããªããããã¯ãããã®ãã©ãŒã©ã ãç©æ¥µçã«æ¢ãæ±ããŠãããããã¬ã³ãã«å察ããããã«åãèãå¿ èŠãšããããã§ãã
ããªãããã®å€åã«ç±å¿ã§ãããªãã°ãç§ã¯ããªãããããã®äººã ã«ãã®å€åã圌ãã®ç掻ãããè¯ãããçç±ãéåžžã«æ確ã«äž»åŒµããå¿ èŠããããšæããŸãã ãªãã¢ããã°ã¬ãŒãããå¿ èŠãããã®ãââã ã¬ã¬ã·ãŒãããžã§ã¯ããéæ¥çãªãã°ä¿®æ£ãåãåããªãããšãå¿é ããå¿ èŠããªãçç±ã ãããŠæ¬è³ªçã«-圌ããçŸåšã§ããªãããšã圌ããä»ã§ããããã«ãªãããšã
ãŸãããã®å€æŽã®éèŠæ§ãå®éã«æ€èšŒããããšã«ãåå泚æããå¿ èŠããããšæããŸãã ãã®å€æŽããã©ã°ã€ã³ãŸãã¯ã©ãããŒãšããŠãªãªãŒã¹ãããã©ã³ã¯ã«ããŒãžããåã«ãæ°ãæã«ããã£ãŠãã®åã蟌ã¿ã泚ææ·±ãç£èŠããå¿ èŠãããã®ã§ã¯ãªãããšæããŸãã äžå€æ§ãããããªæžå¿µãšããŠé倧è©äŸ¡ãããŠããå Žåã¯ãã©ã€ãã©ãªå šäœã®ã³ãŒã¹ãå€æŽããã«ããããã®ããŒã«ã«ãŠãŒã¶ãŒãæºè¶³ãããæ¹æ³ãèŠã€ããããšãã§ããŸãã
åããŠã®ãŠãŒã¶ãŒãšããŠãstartOf endOfã§ãã°ãã倱ã£ãåŸãããã§çµäºããŸããã ãããã®æ¹æ³ã¯é©ãã»ã©å€åããŠããŸãïŒ
å®å šãªäžå€æ§ã®å Žåã¯+1
ãã¶ãå¥ã®è§£æ±ºçã¯ãmomentjsã®ãªããžã§ã¯ããå¯å€ã§ããããšã
å¥ã®è§£æ±ºçãå¯å€æ§ãå¿ èŠãªå Žåã¯ããªããžã§ã¯ãæåã®æŠå¿µã䜿çšãã NEWããŒã¯ãŒããšmomentïŒïŒãã¡ã¯ããªãã¿ãŒã³ã䜿çšããŠãªããžã§ã¯ãäœæãäœæããŸãã
ããåºãäžçã¯ãæ©èœãããã®ãæãã§ããŸãã
...ãã®å€æŽã圌ãã®ç掻ãããè¯ãããçç±ããããã®äººã ã«éåžžã«æ確ã«äž»åŒµããå¿ èŠããããŸã
ç§ãç®æãããã¹ãŠã®äººã¯ããç¬éããå€åãããšããçœ ã«é¥ããŸãã
3幎é䜿çšããåŸã§ããããstartOfã䜿çšããŠããŸããã³ããŒãå¿
èŠãªå Žåã¯2å確èªããããšããå§ãããŸãããšèªåã«èšãèãããå¿
èŠããããŸãã
çŸåšã®åäœã¯çŽæçã§ã¯ãªããããã¯é·ãéé
ããŠããŸãã
array.filter / mapãå€ç°ãããŠããããã©ãã»ã©æ¥œãããã確èªããŠãã ããã
ããã«ãããã...
ããã©ãŒãã³ã¹/ã¡ã¢ãªïŒç§ã¯ä»ãŸã§ã«2ã€ä»¥äžã®æ©èœãé£éãããããšããªããéåžžã¯.set().get()
ç䌌äžå€æ§ïŒjava-pass-by-ref-genããªãªãŒã¹ããããŸã§ãäœäžä»£ã«ãããã£ãŠæéãããããŸãã
OOPãšäžå€æ§ã®ã©ã¡ããæ¢ããŠããããéžæãããšãã@AdamHessã®ã¢ã€ãã¢ã奜ãã§ãã
ç§ãã¡ãæ··ä¹±ããçç±ã«ã€ããŠã®ç§ã®2ã»ã³ãã¯ããã§ãïŒæ»ãå€ã JSã®å¯å€é¢æ°ãäžè¬çã«è¡ãããã«ã moment.add('1', 'days')
ãæªå®çŸ©ãè¿ããŠããå Žåãæ··ä¹±ã¯ãªããªããŸãã åããªããžã§ã¯ããè¿ãããšã¯ãå°ãªããšãç§ã«ãšã£ãŠã¯ãæ°ããã³ããŒãããããšãæå³ããŸãã ãã¡ãããããã¯é£éæ§ãå£ããŸãã
ããå€ãã®éçºè ãã¡ã¢ãªäœ¿çšã®åé¡ã«ã¶ã€ããå¯èœæ§ã¯äœããšæããŸãïŒç¹å¥ãªãŠãŒã¹ã±ãŒã¹ãé€ãïŒã ããããç¬éã®å¯å€æ§ã¯ãã§ã«ç§ãåã¿ãŸããã æ¥ä»ã¯ãæååãæ°å€ã®ãããªå€ãšããŠæ±ãå¿ èŠããããŸãã
ããã©ã«ãã§äžå€ã®å Žåã¯+1
ã¡ãªã¿ã«ããããšåãåé¡ãPHPã«ãååšããŸãã PHPã®ããã«ãªãããã§ããïŒïŒ ð
PHPã§ã¯ãïŒéåžžã®DateTime
ã«å ããŠïŒ DateTimeImmutable
æäŸããããšã§åé¡ã解決ããŸãã
ããã©ã«ãã®åäœãäžå€ã«å€æŽããªãå Žåã¯ãå°ãªããšãimoment
/ momenti
ïŒãŸãã¯ãã®ä»ïŒã®ãããªãã¡ãŒã¹ãã¯ã©ã¹ã®ä»£æ¿APIãæ€èšããå¿
èŠããããŸãã ç§ã¯æåéãåžžã«ãããïŒå¯å€APIãä»ããŠïŒäœ¿çšããç§ã䜿çšããä»ã®ã©ã€ãã©ãªãäžå€ããŒãžã§ã³/ APIã䜿çšããããšãæãã§ããŸãã
ç§ãäžå€æ§ã«æ祚ããŸãããããèšç»ã§ããå Žåã¯ãå®è£ ãæ¯æŽããããšæããŸãã å ç®ãšæžç®ãè¡ããšãã«ããã§ã«å¯å€æ§ã®åé¡ã«ééããŸãããããã«æ··ä¹±ãæãã®ã¯ããããã®ã¡ãœãããé£éã®ããã«ã€ã³ã¹ã¿ã³ã¹ãè¿ãããšã§ãã
ã¡ãªã¿ã«ã¯ããŒã³æéã¯ã©ãã§ããïŒ ãããè¡ãããã®æè¯ã®æ¹æ³ã¯äœã§ãããããããŒãæããªãã£ããã®ãèŠã€ããããšãã§ããŸããã§ããã
@ngerritsenå©çšå¯èœãªæè¯ã®ãªãã·ã§ã³ã¯moment.duration(existingDuration)
ã ãšæããŸãã
åïŒå®è£ ãïŒ3548ã¯ãŸã ã¢ã¯ãã£ããªPRã§ãã ã³ãŒãã¬ãã«ã®äœæ¥ãããŸãæ®ã£ãŠããªãããšãé¡ã£ãŠããŸããã倧ããªå€æŽãæ€èšŒããããã«ãã£ãšç®ãåããŠãåé¡ã¯ãããŸããã ãŸããã¡ãžã£ãŒããŒãžã§ã³ãã³ããå®è¡ããåã«ãããã¥ã¡ã³ããªã©ã«åãçµãå¿ èŠããããŸããããã¯ããã®ãããªå€æŽããªãªãŒã¹ããããã«å¿ èŠã«ãªããŸãã ãã®ãªã¹ãã®ãããããæäŒãããå Žåã¯ãç§ãã¡ã¯ãããããã ããã°å¹žãã§ãã ð
.startOfïŒïŒãå ã®æ¥ä»ãå€æŽããããšã«ãã£ãŠåŒãèµ·ãããã埮åŠãªãã°ãç¹å®ããããã«1æéè²»ãããŸãã...ããŒãã¯ãŒã¯ã®ãããã§ãmomentjsã¯JSã®åªããæ¥ä»ã©ã€ãã©ãªãæ§ç¯ããæ¹æ³ã瀺ãçŽ æŽãããä»äºãããŸããããç§ã¯åãæ¿ããŠããŸããã®çš®ã®ãã°ã®éåžžã«åŸ®åŠãªæ§è³ªãšãããã€ãã®äžè¬çãªFPã®æŠå¿µïŒäž»ã«ReactãReduxãELMã®ãããã§ïŒã玹ä»ããåŸãäžå€æ§ã®äžè¬çãªå©ç¹ãç解ãå§ããããã§ãã
ãã®äŸ¡å€ã«ã€ããŠã¯ãlodashã¯ãã§ã«lodash / fpã䜿çšããããå€ãã®FPã¢ãããŒãã«åŸã£ãŠããŸãã ãã¹ãŠãå®å šã«æžãçŽãã®ã§ã¯ãªããæ¢åã®é¢æ°ãã©ãããããããlodash / fpãã©ã®ããã«å®è£ ãããŠãããã確èªããããšããå§ãããŸãã Lodashã®äººãã¡ã¯ããã©ãŒãã³ã¹ã«ã€ããŠãéåžžã«å¿é ããŠããŸãã
@mullã«ãåæã
moment.frozenåå空éãæ©èœããŠããéã¯ãåã®æçš¿è ã瀺åããããã«ã date-fnsã®ã¿ã䜿çšããããšããå§ãããŸãã
å¯å€ã¢ãŒã¡ã³ãã«ããå¥ã®ãã°ãä¿®æ£ããŸããð
æ£çŽã«é¢é£ããŠã3.0ãES6ã¯ã©ã¹ã«ç§»è¡ã§ããã°çŽ æŽãããã§ãããã
let mom1 = new Moment();
let mom2 = Moment.parse('2019-03-01T14:55');
// etc
ãã®ãããªåãã¯ãŸããäžå€æ§ã®è°è«ãå°ãå¯èœæ§ããããŸãã 1ã€ã®äŸå€ãé€ããŠããã¹ãŠã®ã¡ãœããã¯äžå€ã§ããå¿
èŠããããŸãã .set('minute/hour/year/etc', 18)
ãšåŒã°ããã¡ãœããã
ç§ã¯Momentã䜿ãå§ããã°ããã§ããã®ã©ã€ãã©ãªãæåããå®å šã«äžå€ã§ã¯ãªãããšã«_ææ_ããŸããã ãããä¿®æ£ããããŸã§ã moment-immutableã䜿çšããŠããŸãã
@alancnetã®ç¬éã¯ããããå€æŽãããããšã¯ãããŸããã ããã¯ããŸãã«ã倧ããªå€åã§ãããçŸåšã®è¡åãåãå ¥ããããšãåŠãã ãŠãŒã¶ãŒããã®ååãªåçºããããŸãã
圌ãã®æ°ãããããžã§ã¯ãããã§ãã¯ããŠãã ããïŒ luxon
ããã¯éåžžã«çŽ æŽããããã¢ãã³ã§ãäžå€ïŒïŒïŒã§ããããã¹ãŠã.clone()
åŒã³åºãã§ã©ããããã¢ãŒã¡ã³ãäžå€ãããã¯ããã«åªããããã©ãŒãã³ã¹ãçºæ®ããã¯ãã§ãã
momentjsããææ°ã®ã¢ãããŒãã«ç§»è¡ãããå Žåã¯ã httpsïŒ//github.com/you-dont-need/You-Dont-Need-Momentjsããã§ãã¯ããŠ
ãããå¯å€ã§ããããšã«éåžžã«é©ããŠããŸãïŒ
luxonã代æ¿åã«ãªããŸã§ã©ã®ããã
@alamotheãã®è³ªåã¯ãŠã§ããµã€ãã§æ確ã«åçãããŠããŸãïŒ https ïŒ //moment.github.io/luxon/docs/manual/moment.html
ãããéããŸãã ä»ã®äººãææããŠããããã«ãã»ãšãã©äžå€ã®APIãå¿ èŠãªå Žåã¯ãLuxonã䜿çšããŠãã ããã ããããšãã
æãåèã«ãªãã³ã¡ã³ã
ç§ã®2ã»ã³ãã¯ãå®å šãªäžå€æ§ãæ¡çšãããããŸã£ããæ¡çšããªããã®ã©ã¡ããã§ãããšããããšã§ãã äžå€ã®ã¡ãœããïŒ
startOf
ãadd
ïŒãšããã§ãªãã¡ãœããïŒyear
ãget
ïŒããããšæ··ä¹±ããã ãã§ãéçºè ã¯è¿œè·¡ããå¿ èŠããããŸããã©ããã©ããã