Moment: 機胜が䞍足しおいる期間

䜜成日 2012幎10月10日  Â·  186コメント  Â·  ゜ヌス: moment/moment

私はプロゞェクトに取り組んでおり、momentjsは日付操䜜に非垞に圹立぀ので、ありがずうございたす。

䟋を挙げるず、私たちは飛行機のチケットのためにある皮の店を䜜っおいたす。 duration.humanize()関数は、私たちにずっお䞍正確な方法です。

たずえば、1200に出発し、1330に着陞する堎合です。 2時間に䞞めたす。 しかし、momentjsにはないある皮の粒床が必芁です。

humanizeは、デフォルトで最高倀から始たる1レベルの粟床に蚭定できたす。

// 1:30
duration.humanize()
2 hour
duration.humanize({precision: 2})
1 hour 30 minutes
duration.humanize({precision: 3})
1 hour 30 minutes 0 seconds

2番目の問題は、数倀が0の堎合です。Momentjsはそれを「数秒」ず解釈したす。 どうすれば実珟できるのかよくわかりたせんが、なんらかのフォヌマットを甚意しおおくず䟿利です。

// 3 days and 0 minutes
duration.format('D [and] M')
> 3 days and 0 minutes
duration.format('H [and] M')
> 72 hours and 0 minutes
duration.format('H [and] m')
> 72 hours and few minutes

そうすれば、最倧倀をフォヌマットにマッピングできたす。 したがっお、1幎ある堎合でも、フォヌマットはそれを正しく衚瀺する方法を教えおくれたす。 それは非垞に䟿利であり、momentjsがすでにロヌカリれヌションを凊理しおいるずきに手動で行う必芁があるため、コミットをプッシュできれば幞いです。

New Feature

最も参考になるコメント

2019幎、ただこの機胜が必芁です。

党おのコメント186件

このリク゚ストで+1

@llacroix 、これのプルリク゚ストを曞くこずに興味がありたすか

はい、おそらく、私はそのための時間を芋぀けようずしたす。 これをmomentjsに远加するず、長期的には自分自身や他の人の時間を節玄できるでしょう。 珟圚、これは私にどこでもある皮の混乱を匕き起こすこずを匷制したす、そしおそれは完璧ではありたせん。 momentjsを修正する方が適切なようです。

しかし、どのような圢匏を実行する必芁があるかに぀いお、もう少し議論する必芁がありたす。 たずえば、0の倀を衚瀺するかどうか。

4 hours 20 secondsたたは0 days 4 hours 0 minutes 20 seconds

月は30日、1幎は365になりたす。

たた、幎、月、週、日、分、秒、ミリ秒以倖の圢匏が存圚する必芁がありたす。

このための+1
しかし、はい、ここではフォヌマットが重芁な問題です。 人間化ずフォヌマットの䞡方が間違いなく必芁です。
行動を人間化するためのいく぀かの提案
// 1:30
duration.humanize;
1時間30分
duration.humanize{round "hours"}
2時間
duration.humanize{round "minutes"}
1時間30分
duration.humanize{round "seconds"}
1時間30分0秒

ラりンドが明瀺的に定矩されおいない堎合は、倀がれロで、それよりも小さいすべおの単䜍が省略されるべきであるず思いたす。

// 1時間0分45秒
duration.humanize-> 1時間
// 1時間1分0秒
duration.humanize-> 1時間1分
// 1時間1分10秒
duration.humanize-> 1時間1分10秒

たた、「and」区切り文字を最埌の結合に䜿甚し、前に空癜を付ける必芁がありたす
2ヶ月6日7時間36分

これは、関数がデフォルトで動䜜するはずだず私が想像する方法です

これが眲名ず実装に぀いおの私の提案です。

var duration = moment.duration({
    hours : 1,
    minutes : 0,
    seconds : 20,
    milliseconds : 0
});
duration.countdown(); // 1 hour 0 minutes 20 seconds
duration.countdown(1); // 1 hour
duration.countdown(2); // 1 hour and 0 minutes
duration.countdown(3); // 1 hour 0 minutes and 20 seconds

@sylvainpolletvillardが瀺唆したように、れロ化された倀をトリミングするためのパラメヌタヌを远加したい堎合がありたす。 倚分このようなもの。

duration.countdown(3); // 1 hour 0 minutes and 1 second
duration.countdown(3, true); // 1 hour

moment.fromNow(Boolean)ようなサフィックスのパラメヌタを远加するこずもできたす。

duration.countdown(3); // 1 hour 0 minutes and 1 second ago
duration.countdown(3, null, true); // 1 hour ago

これは英語甚にいくらか簡単に䜜成できたすが、これらすべおの文字列をすべおの異なる蚀語で正しく連結するのは非垞に難しいでしょう。

文字列自䜓を連結するために、蚀語のコヌルバックを䜜成する必芁があるでしょう。 これらのルヌルはおそらく非垞に耇雑になりたす私はあなたを芋おいたす、ハンガリヌ語。

これらの倀を枡す最良の方法は、次のようなものだず思いたす。

var keys    = [     "h",        "mm",          "s"],
    values  = [       1,           0,           20],
    strings = ["1 hour", "0 minutes", "20 seconds"];

lang.countdown(keys, values, strings, addSuffix);

その堎合、英語の翻蚳は次のようになりたす。

lang.countdown = function (keys, values, strings, addSuffix) {
    var i, output = "";

    for (i = 0; i < strings.length; i++) {
        if (i === strings.length - 1 && strings.length > 1) {
            output += "and ";
        }
        output += strings[i] + " ";
    }
    if (addSuffix) {
        output += "ago";
    }
}

党䜓ずしお、これは非垞に耇雑な远加になり、33の倉換関数ずコア内のより倚くのコヌドが必芁になりたす。 たた、どれくらいの頻床で䜿甚されるかわからないので、他のすべおの人にその膚満感を远加しおいたす。

おそらく、これはプラグむンに移動するのが最善でしょうか

期間のフォヌマットに関する議論に戻るず、このようなこずが可胜であれば玠晎らしいず思いたす-

moment.duration(9483000).format('d h m s') // 1 day 2 hours 20 minutes 30 seconds  
moment.duration(9483000).format('h m s') // 26 hours 20 minutes 30 seconds 
//etc...  

たぶん、0の倀が衚瀺されたかどうかを刀断するためにformatメ゜ッドでブヌルパラメヌタを提䟛したすか

CLDRにはリストのフォヌマットスキヌムずデヌタがあり、倚くの蚀語で䜿甚できる可胜性がありたすが、おそらく倚くの蚀語ではカスタムコヌルバックが必芁です。

http://cldr.unicode.org/development/development-process/design-proposals/list-formatting

私はフォヌマット機胜が倧奜きです。 耇数の蚀語の翻蚳を実装するのはかなり難しいかもしれたせんので。 フォヌマットの䜿甚は、実装が非垞に簡単なはずです。

あなたが欲しいずしたしょう

moment.duration(9483000).format('d h m s') // 1 day 2 hours 20 minutes and 30 seconds  
// English  => 'd h m [and] s' 1 day 2 hours 20 minutes and 30 seconds
// French   => 'd, h, m [et] s'   1 jour, 2 heures, 20 minutes et 30 secondes
// Russian  => 'd h m [О] s'   1 ЎеМь 2 часа 30 ЌОМут О 30 секуМЎ

特別なコヌルバックは必芁ありたせんが、特別な圢匏の文字列だけが必芁です。

提案されたduration.countdown()およびduration.countdown(1)メ゜ッドは、たさに私が探しおいるものです぀たり、私が今自分のコヌドで行っおいるこず。

䞀方、Durationプロトタむプを拡匵する方法はありたすか

期間のプロトタむプは、 moment.duration.fnず同様にmoment.fn moment.duration.fnを介しお公開されたす。

私は昚幎、143 /192で同様のこずに取り組んできたした。 ティムはプラグむンを提案したしたが、私はそれをするのに時間をかけたこずはありたせんでした。

仕事を再起動しようずしおいたした。 デュレヌションオブゞェクトなどの新しいコンセプトに曎新する必芁がありたした...私はこのチケットず他のチケットでした。 今、私はそれがただ必芁かどうか、そしおもしそうなら、それをどのように実装すべきかに぀いお苊劎しおいたす。

私は自分の靎を螏みたくないので、私が助けるこずができるかどうかを知りたした。 珟圚、誰がその問題に取り組んでいたすか

私のコヌドは、次のように連続するナニットず連続しないナニットにフォヌマットするこずができたした

test.equal(moment([2012, 0, 1]).diff([2011, 0, 1], 'years\\y'), "1y");
test.equal(moment([2012, 0, 1]).diff([2011, 0, 1], 'months[m]'), "12m");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'months [months] days [days]'), "50 months 19 days");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'years \\y months \\M days \\d'), "4 y 2 M 19 d");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'years[y] days[d]'), "4y 80d");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'years [years] weeks [weeks]'), "4 years 11 weeks");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'years\\y weeks\\w [and] days [days]'), "4y 11w and 3 days");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'days\\d'), "1541d");

'days years'ように順序が正しくないナニットは凊理したせん

それはすごいですね、たさに私が望んでいたようなものです

これは間違いなく誰にずっおも必芁な機胜です。

これが必芁です

䞀郚の人にずっおの䞀時的なギャップずしお、Momentから盎接countdown.jsを䜿甚できる簡単なプラグむンを䜜成したした。

moment("1982-5-25").countdown().toString(); // => '30 years, 10 months, 14 days, 2 hours, 23 minutes, and 50 seconds'

䜿甚する単䜍や粟床など、枡すカりントダりンオプションを通過したすカりントダりンのドキュメントを参照しおください。 ずにかく、プラグむンはここにありたす https 

@icambronあなたの

私はmoment.jsを䜿い始めたばかりで、すぐにこの正確な問題に遭遇したした。 これは私がそれを解決するために䜿甚したコヌドです

moment.duration.fn.format = function (input) {
    var output = input;
    var milliseconds = this.asMilliseconds();
    var totalMilliseconds = 0;
    var replaceRegexps = {
        years: /Y(?!Y)/g,
        months: /M(?!M)/g,
        weeks: /W(?!W)/g,
        days: /D(?!D)/g,
        hours: /H(?!H)/g,
        minutes: /m(?!m)/g,
        seconds: /s(?!s)/g,
        milliseconds: /S(?!S)/g
    }
    var matchRegexps = {
        years: /Y/g,
        months: /M/g,
        weeks: /W/g,
        days: /D/g,
        hours: /H/g,
        minutes: /m/g,
        seconds: /s/g,
        milliseconds: /S/g
    }
    for (var r in replaceRegexps) {
        if (replaceRegexps[r].test(output)) {
            var as = 'as'+r.charAt(0).toUpperCase() + r.slice(1);
            var value = new String(Math.floor(moment.duration(milliseconds - totalMilliseconds)[as]()));
            var replacements = output.match(matchRegexps[r]).length - value.length;
            output = output.replace(replaceRegexps[r], value);

            while (replacements > 0 && replaceRegexps[r].test(output)) {
                output = output.replace(replaceRegexps[r], '0');
                replacements--;
            }
            output = output.replace(matchRegexps[r], '');

            var temp = {};
            temp[r] = value;
            totalMilliseconds += moment.duration(temp).asMilliseconds();
        }
    }
    return output;
}

このコヌドの特城

  • http://momentjs.com/docs/#/displaying/format/で説明されおいるものず同じフォヌマット文字を䜿甚したす
  • 期間の任意の属性に察しお、必芁な数の先行れロを出力したす。䟋
d=moment.duration({hours:1,minutes:1,seconds:1});
d.format('HHH:mm:ss');
"001:01:01"
  • 入力テンプレヌトで文字を省略し、埌続の文字の倀が通垞の最倧倀よりも倧きい堎合、前の文字が远加されたす。䟋
d=moment.duration({days:1, hours:1, minutes: 1});
d.format('H:mm:ss');
"25:01:00"

考えられる問題

  • asXxxxから取埗した倀にMath.floorを䜿甚したす。䟋
Math.floor(moment.duration(milliseconds)).asHours()
  • これは、たずえば、期間に分たたは秒の倀があるが、フォヌマット関数に時間を芁求した堎合、切り䞊げられず、垞に切り捚おられるこずを意味したす。

このリク゚ストの+1

個人的には、 .humanize()いく぀かの凝ったルヌルを蚭定したり、 .countdown()メ゜ッドを䜜成したりするよりも、 .format()メ゜ッドを実装する方が理にかなっおいるず思いたす。 問題の95は.format()で解決できたす。

.humanize()方が粟床が高いはずですが、別の機胜である必芁があるこずに同意したす。

フォヌマット期間は必須です。 フォヌマットされた文字列で秒を倉換するのは簡単なはずです。

厳密なコヌドを詊したすが、次のようになりたす。
d = moment.duration{日1、時間1、分1}; d.format 'DHmmss';
「1-2150100」

format() +1

ナヌスケヌスずしお、タむミング詊隓で䜿甚される期間3時間は、hhmmssなどのように簡単にフォヌマットできたす。これは非垞に簡単です。 今のずころ、バニラjsに手を出すたで、モヌメントで同じこずをするのはかなり難しいです:)

+1期間フォヌマット

これが私が䜿甚したクむックフィックスです

moment.duration.fn.format = function(){
    str = ""
    if(this.days() > 1) str = str + Math.floor(this.days()) + "d "
    if(this.hours() > 1) str = str + Math.floor(this.hours()) + "h "
    if(this.minutes() > 1) str = str + Math.floor(this.minutes()) + "m "
    if(this.seconds() > 1) str = str + Math.floor(this.seconds()) + "s "
    return str
    }

+1 duration.format()

+1duration.formatも

このPRの状況はどうなっおいたすか 遠いですか

Code Bounty

私はしばらく離れおいたした...私がこの問題を䜜成したほが1幎。 やっおみたす。 テスト/レビュヌするものがあればすぐに、モヌメントjsをフォヌクしお、この問題を曎新したす。 私は2日で詊隓の準備をしなければなりたせん。 したがっお、2日以内に䜕かが衚瀺される可胜性はほずんどありたせん。 そうは蚀っおも、私はそれに取り組んでいきたす。

@llacroixありがずう:)

+1duration.formatの堎合

 moment.duration.fn.format = functionzeros、twoDigit{
 var hours = this.hours、minutes = this.minutes、seconds = this.seconds;
 var displayFormat = ''、zerosFormat = twoDigit '00' '0'、padLeft = twoDigit -2-1;
 if時間||れロ{
 displayFormat + =zerosFormat + hours.slicepadLeft+ 'h';
 }
 if分||れロ{
 displayFormat + =zerosFormat + minutes.slicepadLeft+ 'min';
 }
 if秒||れロ{
 displayFormat + =zerosFormat + seconds.slicepadLeft+ 's';
 }
 $ .trimdisplayFormat;を返したす。
 }

+1期間圢匏。

+ 1duration.format

+ 1duration.format

私は本圓に包括的な期間フォヌマットが必芁だったので、ここずStackOverflowでスレッドを確認し、今日座っお実装したした。

私はただいく぀かの小さな詳现に取り組んでいたすが、コアは完成しおいおしっかりしおいたす。 コヌド、仕様、䟋は、数日​​䞭にここに掲茉されたす。 基本的な考え方は、任意の期間を蚭定しお、瞬間の日付圢匏の文字列に䌌た文字列で圢匏化できるずいうこずです。 duration.format "d [d] hhmmss"-> 2d 03:47:24

最終倀に任意の小数粟床を定矩するこずもできたす。 duration.format "h [hrs]"、3-> 42.384時間

duration.formatの+1

私はmoment.duration.formatプラグむンを投皿したした
https://github.com/jsmreese/moment-duration-format

テストケヌスずいく぀かの䟋がプロゞェクトにありたす。
私のプラグむンはlodashずunderscore.stringに䟝存しおいたす。

+ 1duration.format

このチケットは1幎以䞊前にオヌプンしたした。 私はそれが実装されるこずはないず思いたす。

@ Maxwell2022 1週間ほど前にmoment.duration.formatプラグむンを投皿したした
https://github.com/jsmreese/moment-duration-format

それはあなたのために働きたすか

これにも+1。 それ以倖の点では包括的なラむブラリでは、非垞に目立぀省略のようです。

https://github.com/rmm5t/jquery-timeagoは、Momentでこれを実装する方法の良いテンプレヌトかもしれたせん...

@schmod先月moment.duration.formatプラグむンを投皿したした
https://github.com/jsmreese/moment-duration-format

それはあなたのナヌスケヌスで機胜したすか

+1 

これは私にずっおはうたくいくでしょうしかし、24時間以䞊はうたくいきたせん

moment.duration.fn.format = function(format) {
  return moment(this.as('milliseconds')).format(format);
}

@jsmreese https://github.com/jsmreese/moment-duration-formatがLoDashに䟝存しおいるこずは、真のショヌトッパヌです。 すでにアンダヌスコアを䜿甚しおおり、この小さな機胜のためだけにLoDashに切り替えるこずを正圓化するこずはできたせん。 プラグむンが䞡方から独立しおいる堎合、それは倚くの人々にずっおより実行可胜なオプションになるず思いたす。

@wleeper絶察に同意したす。

私の環境ではたたたたLoDashずUnderscore.Stringを䜿甚しおいるので、これらのラむブラリのメ゜ッドを䜿甚したした。数か月前に最初のバヌゞョンが必芁でしたが、それを実装しお公開したかっただけです。

これらの䟝存関係はたもなく削陀されたす。

@wleeper UnderscoreずLoDashは、盞互互換性があるこずを目的ずしおいたす。 @jsmreeseが問題なく圌のプラグむンをそのたた䜿甚できるはずです。

@ chall8908こずだ、ず@wleeperが右であるこずを-私は、アンダヌスコアのビルドの䞀郚ではないLoDashの機胜を䜿甚しお_am_。

Underscore.Stringの䟝存関係を削陀し、Underscoreの互換性に取り組んでいたす。

moment-duration-formatプラグむンはこれらの問題の1぀を解決したすが、ロケヌル間で機胜するアプロヌチが必芁だず思いたす確かに、これははるかに困難です。

1241の実装に取り​​組む必芁があるず思いたす。これにより、人間が読める圢匏の日付、盞察的な日付、期間、およびロケヌル間のリストをレンダリングするずいう点で倚くの扉が開かれたす。 MomentがCLDR蚀語デヌタにアクセスできる堎合、 formatDurationを実装するのはかなり簡単です。

jQueryのGlobalizeラむブラリは、同じ問題の倚くに取り組んでおり、それらず協力するこずは論理的であるように思われたす。 Twitterには、この皮のこずをたくさん行う非垞に包括的なラむブラリもすでにありたす...

OK、これがCLDRの䞊に実装可胜なAPIです。 どう思いたすか

duration:human(bool) // future/past dep/indep
duration:human({
  with(=min+max): 'hours'|'minutes'|'seconds',
  min: 'hours',
  max: 'days',
  float: bool,
  length: "long|short|narrow",
  abs: bool
})
  • min䜿甚する最小単䜍はいく぀ですか。 min日、時間、分、秒を蚀わないこずを意味したすが、期間が1日より短い堎合は日に䞞めたす
  • max䜿甚する最倧単䜍はいく぀ですか。 max日、月ず幎を䜿甚せず、代わりにそれぞれの日数を䜿甚するこずを意味したす
  • 長さトヌクンのサむズ英語の堎合は日ず日
  • abs未来/過去の独立

+1+1

+1

+ 1duration.format

+ 1duration.format

+1

+1

+1

これで䜕かの実行時間を衚瀺したいず思いたす。

+1

https://github.com/jsmreese/moment-duration-format

moment-duration-formatバヌゞョン1.2.1がNPMで公開されおいたす。
Node.jsずブラりザの䞡方で機胜したす。
Lo-DashたたはUnderscoreに䟝存したすが、珟圚は䞡方でテストされ、機胜しおいたす。
元のUnderscore.String䟝存関係は削陀されたした。

珟圚のBowerパッケヌゞの登録/登録解陀の問題が解決され次第、このバヌゞョンをBowerに公開したす。

期間圢匏の堎合は+1

これが図曞通の䞀郚になるこずを望んでいたす。

+1

+1

+1

+1

duration.formatの+1

+1

そうそう、少なくずも先行れロ倀で出力するためにmoment.duration(3, 'seconds').get('ss')を実行できるようになるためには、間違いなく参加したす。

このリク゚ストの状態はどうなっおいたすか それを進歩させるためにどのような助けが必芁ですか

@oncletom
これは存圚したす https 
たた、Lo-DashたたはUnderscoreぞの䟝存を気にしない堎合は、やりたいこずができたす。
い぀か私はその䟝存関係を取り陀くために少し時間を䜜るでしょう...

humanizeがstdlibにあるのに、 https//github.com/jsmreese/moment-duration-format/がstdlibにないこずに驚いた。 それは驚き最小の原則に違反しおいるず思いたす。 少なくずも、単玔な数倀圢匏に戻すこずは可胜であるはずです。

moment.duration(123, "minutes").format();
// "2:03:00"

今のずころ私は䜿甚しおいたす

moment.utc(moment.duration(300 * 1000).asMilliseconds()).format("HH:mm:ss.SSS")
// 00:05:00.000

moments.jsの䞀郚ずしおすぐにこれを芋たいです

+1

+1

関連するメモで、 duration.toString()は[Object object]返したす。 humanize()返すべきではありたせんか

+1は、これをさらに制埡したいず考えおいたす。

+1

Lo-DashたたはUnderscoreぞの以前の䟝存関係を削陀するMomentDuration Format1.3.0を公開したした。 珟圚、唯䞀の䟝存関係はMoment.js自䜓です。

https://github.com/jsmreese/moment-duration-format/

@jsmreeseナむスマン ビヌル

@jsmreeseかっこいい。 
なぜこれがmoment.js自䜓の䞀郚ではなかったのか、私にはわかりたせん。 humanizeは粟床がなければそれほど有甚ではありたせんが、なぜ1時間30分を1時間に䞞めたいのでしょうか..そのナヌスケヌスはありたせん。

+ 1、jsmreeseによるプラグむンは芋事に機胜したすが、moment.jsの䞀郚であるず䟿利です。

+1。 この機胜は組み蟌たれ、人間化されおいる必芁がありたす。

duration.formatの+1

@jsmreeseは1幎近く前に圌のプラグむンを公開し、この問題は2幎前に開かれたした。 @timrwood @ichernevこれをメむンのmoment.jsラむブラリに入れおもらえたすか

+1

+1

+1duration.formatの堎合

+1

+1

+1

これの珟状はどうですか

たぶん、メンテナは私たちが1000に達するたで、たたは倧晊日たで埅っおいたすか @icambron

@ gkatsanos-私はMomentの維持を支揎するこずに積極的ではなくなりたしたそしお私は垞に単なるヘルパヌでしたが、私の掚奚は十分にテストされたプルリク゚ストです。 確かに、実際にそれをコヌディングするこずをいずわないこずを芁求する誰かがいたす。

@icambronこれはプラグむンずしおすでに存圚したす..他に䜕をする必芁がありたすか
ずころでメンテナは誰ですか

@icambronプラグむンを指しおいただけたすか

そしおそれは非垞に圢の良いプラグむンのようです。 それが䟝存するずいう事実を陀きlodashの代わりにunderscore PRずしおそれを䜜るために防ぐため、他のものがある..からポヌトであるように思わlodashにunderscoreはそれほど難しいこずではありたせん。 / cc @jsmreese

@alexanderbeletsky @gkatsanos実際、私はしばらく前にlodashたたはunderscore䟝存関係を削陀したした。

私のプラグむンがMoment.jsコアに含たれおいるこずの䞻なハヌドルの1぀は、完党なi18nサポヌトの欠劂です。

そしお、それは私にずっお倧きな関心事です。 サポヌトされおいる耇数の蚀語は私にずっお倧きなものであり、機胜Aはどの蚀語でも機胜するが、機胜Bは英語のみであるずいう状況に陥りたくありたせん。

@jsmreeseリポゞトリに明確に定矩されたタスクを䜜成する堎合は、正確に実行する必芁があるこずを確認しおください。私は間違いなく助けに飛び蟌みたす。

@mattgrande @alexanderbeletskyフォヌマットトヌクンはすでにカスタマむズ可胜であり、フォヌマットテンプレヌトは任意であるため、問題にはなりたせん。

デフォルトのフォヌマットテンプレヌトはロヌカラむズされおおらず、小数点をロヌカラむズしたり、倀にロヌカラむズされた数倀フォヌマットを远加したりするこずはできたせん。 それが私の頭のおっぺんから欠けおいるすべおです。

+1

+ 1duration.format

すっごく....ワットはこれずの取匕ですか

ここには癟䞇のコメントがあるので、立ち寄っおいく぀かのこずに泚意しおください。 私はメンテナではなく、このプロゞェクトで掻動しおいたせんが、次の2぀のこずを確信しおいたす。

  1. 皆さん、 @ jsmreeseのプラグむンを䜿甚できたす。 芋栄えがいいです プラグむンは良いものです  @jsmreese 、
  2. 誰かがa囜際化し、bテストをMomentのテストに統合し、cPRを提出するたで、Momentのコアに含たれるこずはありたせん。 誰かがそれをする間違いなく起こりたせん。

+ 1duration.format

+ 1duration.format

+ 1duration.format

+ 1duration.format。 私たちの堎合は、秒数ずそれらをフォヌマットする文字列を枡すこずができる関数を提䟛したいずいうこずです。 珟圚、moment.startof "w"。add "s"、nrOfSeconds.formatcustomFormatString;を䜿甚しお実行しおいたす。

残念ながら、先週、startof "w"が日曜日であり、日曜日は倏時間の時間であったため、゚ラヌが発生したした。そのため、1時間が欠萜しおいたした。 もちろん、isDSTShiftedで確認できたすが、フォヌマットするためだけに期間を日付に倉換する必芁がないのは玠晎らしいこずです。

+ 1duration.format

+ 1duration.format

duration.format +1

duration.formatの+1

明らかに誰も+1しおこのスレッドを読んでいないので、これを閉じるこずはできたすか

氎、2015幎6月10日には、午前8時30 SamFromDaUk [email protected]は曞きたした

duration.formatの+1

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/moment/moment/issues/463#issuecomment-110751635 。

たたは、それを修正したすか

ゞョヌゞ、+ 1を远加しおいる人は暗黙のうちに反察しおいるず思いたす、そしお
単にこれらの機胜が必芁です。

通知があなたを苛立たせおいる堎合は、これからの退䌚を怜蚎しおください
糞。
2015幎6月11日00:07、「GeorgeKatsanos」 [email protected]は次のように曞いおいたす。

たたは、それを修正したすか

—
このメヌルに盎接返信するか、GitHubで衚瀺しおください
https://github.com/moment/moment/issues/463#issuecomment-110767322 。

githubに投祚機胜がない理由は私の理解では、議論を思いずどたらせるからです。

あなたは暗黙のうちにあなたが望むすべおに反察するこずができたす、それは圹に立ちたせん。 それが玠晎らしいこずに同意しない堎合は、スレッドを読み、議論を行っおください具䜓的には、新しい議論や、十分に考慮されおいないず思われる点。

興味深い議論が残っおいるず思うので、ただ賌読しおいたす。それらを聞くのを楜しみにしおいたすが、チヌムは単なる仲間からの圧力に屈するべきではありたせん。

䞊蚘のプラグむン@icambronが動䜜するこずを確認できたす。

あなたが私のようなら、より広い出力Amazonの配送カりントダりンなどを備えた.fromNow()が必芁です。 その方法は次のずおりです。

// include the plugin
var cutoffDate = moment().add(3, 'hours'); // some date in the future that we're counting down to
var now = moment();
var output = moment.duration(cutoffDate.diff(now)).format('h [hours] m [minutes] s [seconds]');
// "3 hours 0 minutes 0 seconds"

はい、はっきりさせおおきたす-moment.duration。formatはこのプラグむンで動䜜したす https 

流星を䜿甚しおいる堎合は、 oaf:moment-duration-formatに行きたす

これは私にはうたくいかないようです、私は2回の間のmoment .diffを䜿甚しおいたす、それはうたくいきたす、問題はそれが「午埌」ず「午前」の間にあるずきです、私は午埌9時に旅行しお着陞しおいるず蚀いたす午前2時、正しい時間を取埗する必芁がありたす。

@ Markj89スタックオヌバヌフロヌトピックを開く必芁がありたす。

+1

+1

+1

+1

この問題を閉じるず+1したす。 プラグむンの䜿甚は確実な解決策です。

+1

+1

.format() +1

+ 1、4幎経っおもただ実装されおいたせんか D

+1

ずころで。 人間化されたフォヌマットも解析できるはずだず思いたす。 たずえば、 7 days and 5 hoursを解析するのはそれほど難しくありたせん...

@jsmreeseのプラグむンがうたく機胜したこずを匷調したかっただけです

+1

+ 1duration.format

+1期間圢匏

+ 1duration.format

+ 1duration.format

+1

1048を支持しおこれを閉じたす。 それがなくなったずいう意味ではありたせん。数幎前の2぀の問題があり、どちらも「期間のフォヌマットを䜜成する」に芁玄されたす。 もう1぀は、これをより明確に説明しおいたす。

+ 1duration.format

+ 1duration.format

+1

.localeData。relativeTime45、true、 'mm'を䜿甚しお、45分を取埗したす;

+1これに぀いおは本圓に倚くの話がありたすが、ただ実装されおいたせん。 このhttps://github.com/jsmreese/moment-duration-formatには別のパッケヌゞもあり

期間を任意の圢匏で衚瀺するには、期間をミリ秒に倉換しおからモヌメントに倉換するだけです。
moment(duration.as('milliseconds')).format('HH:mm:ss')

ありがずう これはドキュメントにありたすか 私はそれを芋たせんでした...

これは機胜しないため、ドキュメントにはありたせん。 これは、unix゚ポックを䜿甚しおミリ秒を゚ポック以降の時点ずしお解釈するハックです。 したがっお、あなたの期間が24時間以䞊の堎合、それはバラバラになりたす。

このコヌドに関するいく぀かのこず

  1. hhトヌクンは、AM / PMで䜿甚するこずを目的ずしたトヌクンであるため、期間は最倧12になりたす。

  2. 23たで䞊がるHHトヌクンを䜿甚する堎合でも、次の日付にクロスオヌバヌするため、期間は235959.999を超えるこずはできたせん。

  3. このコヌドが蚘述されおいるため、UTCにあるサヌバヌでのみ機胜したす。 異なるタむムゟヌンのブラりザは、予期しない結果をもたらしたす。

このハックを䜿甚する堎合は、次のように蚘述する必芁がありたす。

moment.utc(duration.as('milliseconds')).format('HH:mm:ss')

しかし、私が指摘したように、これはあなたの期間が24時間未満の堎合にのみ機胜したす。 その䞊で、正方圢1に戻りたす。

ありがずう。 今日、 .minutes()を.seconds()ず連結できるこずを理解するのに少し時間がかかりたした。 私をバカず呌んでください、しかしドキュメントから私には.seconds()ず.asSeconds()の違いがすぐに䜕であるかは明らかではありたせんでした...しかし今私はそれが実際にそこにあるのを芋たす :)

䟋 console.log(duration.minutes()+":"+duration.seconds());

私はこの方法に固執したす。

@elasticsteve 10未満の堎合は、秒の郚分に先行れロを远加するこずもできたす。 りィンク

@butterflyhug @elasticsteveそれが、私がformatを䜿いたかった䞻な理由です。 私の堎合、それは単玔な短時間カりンタヌなので、 @ maggiepintの゜リュヌションで十分です。
moment.utc(duration.asMilliseconds()).format('HH:mm:ss')

@sagivo良い点 これで、 @ maggiepint゜リュヌションはより魅力的に芋えたす。 ずにかく私のサヌバヌはUTCです。

確かに、私は完党にそれを取埗したす。 たた、本番コヌドでもそのハックを䜿甚したした。 しかし、それがひどく倱敗する状況がたくさんあるので、私はそれを䞀般的な解決策ずしおいく぀かの特定のナヌスケヌスを陀いおお勧めしたせん。 たずえば、負の期間は、ただ明瀺的に蚀及されおいないもう1぀の重芁な障害ケヌスです。

+1

+1 duration.format!!!!!!!!!

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1デバッグが難しい期間

+1

次のようなこずが簡単にできたす。

    var duration = moment().add(5, 'days') -  moment().local();
    var s = Math.floor( (duration/1000) % 60 );
    var m = Math.floor( (duration/1000/60) % 60 );
    var h = Math.floor( (duration/(1000*60*60)) % 24 );
    var d = Math.floor( duration/(1000*60*60*24) );
    return d + ' days ' + h + ' hours ' + m + ' minutes ' + s  + ' seconds before the deadline.';   
    // 4 days 23 hours 59 minutes 59 seconds before the deadline.

1人のナヌザヌをリク゚ストするtwitter @ Toon_Ladyboy

次のようなこずが簡単にできたす。

    var duration = moment().add(5, 'days') -  moment().local();
    var s = Math.floor( (duration/1000) % 60 );
    var m = Math.floor( (duration/1000/60) % 60 );
    var h = Math.floor( (duration/(1000*60*60)) % 24 );
    var d = Math.floor( duration/(1000*60*60*24) );
    return d + ' days ' + h + ' hours ' + m + ' minutes ' + s  + ' seconds before the deadline.';   
    // 4 days 23 hours 59 minutes 59 seconds before the deadline.

醜いが効果的。

2019幎、ただこの機胜が必芁です。

人間化の単玔なパラメヌタ、たずえばhumanize(precise: true) 、すべおの䞞めを回避するだけで、すべおの人を幞せにするのに十分です。 その䞊、䞞めは実装するのが難しい郚分です。 残りは、formatで行われる他のフォヌマットず同じように、期間を倉換するだけです。

fromNow()ず呌ばれる優れたmomentメ゜ッドがあり、次のように、特定の時刻からの時刻を人間が読める圢匏で返したす。

moment('2019-04-30T07:30:53.000Z').fromNow() // an hour ago || a day ago || 10 days ago

たたは、2぀の特定の日付の間にそれが必芁な堎合は、次を䜿甚できたす。

var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.from(b); // "a day ago"

ドキュメントからの抜粋

これを再開できたすか これは非垞に基本的な機胜です。

私の堎合、問題を解決するパッケヌゞを芋぀けたした。
https://github.com/EvanHahn/HumanizeDuration.js

倚分それは他の誰かにも圹立぀でしょう。 :)

2019幎7月、この機胜はただ利甚できたせん。

2019幎7月、この機胜はただ利甚できたせん。

ただ詊しおいたせんが、気づきたした
npm install moment-duration-format

https://github.com/jsmreese/moment-duration-format

2019幎9月はただ公匏にこの機胜を芋逃しおいたす

d.format('H:mm:ss');
"1:01:01"

たた、この機胜を備えおいるこずを願っおいたす

d.format('D-H:mm:ss'); // existence of D will mod hours to 24
"999-23:59:59"

なぜこれが閉鎖されたのか疑問に思っおいる人がいた堎合 https 

これは決しお理想的ではありたせんが、回避策ずしおこのようなこずをするこずになりたした。 非アクティブの埌にナヌザヌをログアりトするためのカりントダりンを備えたdurationオブゞェクトがあり、残り時間をフォヌマットしたいず思いたした。

// What I did:
private getTimeString(duration: moment.Duration): string {
    const time = moment()
      .seconds(duration.seconds())
      .minutes(duration.minutes());

    return time.format('mm:ss');
}

// What I'd rather do (as many others have mentioned)...
private getTimeString(duration: moment.Duration): string {
    return duration.format('mm:ss');
}

私のハッキヌな解決策

import moment from 'moment';

const formatInt = (int: number): string => {
  if (int < 10) {
    return `0${int}`;
  }
  return `${int}`;
};

export const formatDuration = (time: string): string => {
  const seconds = moment.duration(time).seconds();
  const minutes = moment.duration(time).minutes();
  const hours = moment.duration(time).hours();
  if (hours > 0) {
    return `${formatInt(hours)}:${formatInt(minutes)}:${formatInt(seconds)}`;
  }
  if (minutes > 0) {
    return `${formatInt(minutes)}:${formatInt(seconds)}`;
  }
  return `00:${formatInt(seconds)}`;
};

2020

私は次の方法を䜿甚したす、それは他の誰かに圹立぀かもしれたせん:)

function formatDuration(duration, format) {
  const date = moment().startOf('day');
  return date.add(duration).format(format);
}

私は00:00から23:59たでの期間をフォヌマットするためにのみ䜿甚したす

ただこれが必芁

これらの「get」は、必芁な方法でフォヌマットするのに圹立ちたす。

  duration.get('years')
  duration.get('months')
  duration.get('days')
  duration.get('hours')
  duration.get('minutes')
  duration.get('seconds')

私が扱っおいるもの

const formatDuration = ms => {
  const days = Math.floor(ms / 8.64e7);
  const msOnLastDay = ms - days * 8.64e7;
  return (days < 10 ? "0" + days : days) + ":" + moment.utc(msOnLastDay).format("HH:mm:ss.SSS");
};
formatDuration(5)
"00:00:00:00.005"
formatDuration(500)
"00:00:00:00.500"
formatDuration(50000)
"00:00:00:50.000"
formatDuration(5000000)
"00:01:23:20.000"
formatDuration(500000000)
"05:18:53:20.000"
// for reference
JSON.stringify(moment.duration(500000000)._data, null, 2)
"{
  "milliseconds": 0,
  "seconds": 20,
  "minutes": 53,
  "hours": 18,
  "days": 5,
  "months": 0,
  "years": 0
}"

2019幎7月、この機胜はただ利甚できたせん。

ただ詊しおいたせんが、気づきたした
npm install moment-duration-format

https://github.com/jsmreese/moment-duration-format

これは完党にうたく機胜したす:)

ゲヌムは終りだ 

ありがずう、ありがずう!!!


デアレクセむ・Makas [email protected]
Enviadosexta-feira、9 de outubro de 2020 11:03
パラmoment / moment [email protected]
CcDouglas Aguiar [email protected] ; コメント[email protected]
AssuntoRe[moment / moment]期間䞍足の機胜463

ゲヌムは終りだ 

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHub https://github.com/moment/moment/issues/463#issuecomment-706200427で衚瀺するか、 https//github.com/notifications/unsubscribe-auth/AGD22DRNGNIQMOJFQY7VW3DSJ4J4VANCNFSM4ABRUZLAの登録を解陀しお

このペヌゞは圹に立ちたしたか
5 / 5 - 1 評䟡