亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

給定月份的 Javascript 返回時間字符串

給定月份的 Javascript 返回時間字符串

絕地無雙 2022-12-29 09:59:23
我正在尋找一個 JS 庫/實用程序/函數,您可以在其中給它指定月數,它會返回它的人類可讀版本。我幾乎已經在 Vanilla JS 中完成了,但現在我發現有很多邊緣情況我不想重新發明輪子。例子func(3) => "3 Months"func(1) => "1 Month" // singularfunc(0.1) => "1 Week"func(0.25) => "2 Weeks"func(13) => "1 year and 1 month"func(14) => "1 year and 2 months"func(14.25) => "1 year, 2 months and two weeks"......etc問題陳述:我不想重新發明輪子,看看有沒有像上面那樣目前正在做日期轉換的庫。
查看完整描述

3 回答

?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

使用moment.js:


Date.getFormattedDateDiff = function (date1, date2) {

  var b = moment(date1),

    a = moment(date2),

    intervals = ['year', 'month', 'week', 'day'],

    out = [];


  for (var i = 0; i < intervals.length; i++) {

    var diff = a.diff(b, intervals[i]);

    b.add(diff, intervals[i]);

    if (diff == 0)

      continue;

    out.push(diff + ' ' + intervals[i] + (diff > 1 ? "s" : ""));

  }

  return out.join(', ');

};


function OutputMonths(months) {

  var newYear = new Date(new Date().getFullYear(), 0, 1);

  var days = (months % 1) * 30.4167;


  var newDate = new Date(newYear.getTime());

  newDate.setMonth(newDate.getMonth() + months);

  newDate.setDate(newDate.getDate() + days);


  console.log('Number of months: ' + Date.getFormattedDateDiff(newYear, newDate));

}


OutputMonths(3);

OutputMonths(1);

OutputMonths(0.1);

OutputMonths(0.25);

OutputMonths(13);

OutputMonths(14);

OutputMonths(14.25);

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>


查看完整回答
反對 回復 2022-12-29
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

這取決于您的“人類可讀版本”版本是什么。您可以簡單地將您的月份數字轉換為天數并從那里開始工作。由于您在示例案例中包含了年、月和周,因此您所需要的就是這個。

function func(months) {

    let days = months * 30.5; // Average days in a month

    let y = 0, m = 0, w = 0;

    while (days >= 365) {y++;days -= 365;}

    while (days >= 30.5) {m++;days -= 30.5;}

    while (days >= 7) {w++;days -= 7;}

    let out = 

        (y ? (`${y} Year` + (y > 1 ? "s " : " ")) : "") +

        (m ? (`${m} Month` + (m > 1 ? "s " : " ")) : "") +

        (w ? (`${w} Week` + (w > 1 ? "s " : " ")) : "");

    console.log(out);

}

func(10);

func(3);

func(1);

func(0.1);

func(0.25);

func(13);

func(14);

func(14.25);

越簡單越好,特別是當它是一個如此簡單的問題時。您不想為此使用庫來膨脹您的應用程序。




查看完整回答
反對 回復 2022-12-29
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

console.log(moment.duration(40, 'months').toISOString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>

http://img1.sycdn.imooc.com//63acf4af0001fc7221111235.jpg

也看看https://github.com/codebox/moment-precise-range


查看完整回答
反對 回復 2022-12-29
  • 3 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號