如何使用moment.js将年份转换为月份?

时间:2017-12-20 15:58:30

标签: jquery node.js momentjs

目前我的代码如下:

moment.duration(res.duration, 'months').format("M [months]"); //Input 0.08 outputs 0

当resduduration< 0它只返回0。 我试图将我的代码修改为

oSheet.Cells[36, 7].Font.FontStyle = "Regular";
oSheet.Cells[36, 7].Characters(0, 4).Font.FontStyle = "Bold";
oSheet.Cells[36, 7].Characters(10, 4).Font.FontStyle = "Bold";

但似乎仍无效。

任何想法如何将0.08完美转换为1?

2 个答案:

答案 0 :(得分:2)

问题是0.08 1个月,它是0.96个月,所以你必须围绕它。

不幸的是moment-duration-format(我假设您正在使用)只能截断持续时间的值,将负整数传递给precision选项。

可能的解决方案:

  1. 存储更高的精度值,而不是以小数点后二舍五入。这是一个使用0.080.08333333333333333的实例。 (请参阅month()toISOString()
  2. 
    
    var dur = moment.duration(0.08, "years");
    console.log(dur.format('M [Months]'));
    console.log(dur.months());
    console.log(dur.toISOString());
    
    // More decimal gives 1 month
    dur = moment.duration(0.08333333333333333, "years");
    console.log(dur.format('M [Months]'));
    console.log(dur.months());
    console.log(dur.toISOString());
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>
    &#13;
    &#13;
    &#13;

    1. 使用时刻humanize()。您可以按照文档的Relative TimeRelative Time ThresholdsRelative Time Rounding部分中的说明自定义输出。
    2. &#13;
      &#13;
      moment.updateLocale('en', {
          relativeTime : {
              M:  "1 month",
              MM: "%d months"
          }
      });
      
      var dur = moment.duration(0.08, "years");
      console.log(dur.humanize());
      &#13;
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
      &#13;
      &#13;
      &#13;

答案 1 :(得分:1)

我认为你误解了moment.duration的作用:

  

要创建持续时间,请使用以毫秒为单位的时间长度调用moment.duration()。 [...]如果你想用毫秒以外的测量单位创建一个时刻,你也可以通过测量单位。

通过这样做:

moment.duration(0.08, 'months')

您创建的持续时间为0.08 个月。我想你想要0.08

 moment.duration(0.08, 'years')

您也无法在持续时间内使用format,因此请手动执行此操作:

&#13;
&#13;
var months = Math.round(moment.duration(0.08,"years").months());
console.log(months,"month");
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
&#13;
&#13;
&#13;

如果你真的想使用format,你可以将你的持续时间转换回来

&#13;
&#13;
var dur = moment.duration(0.08,"years");
console.log(moment.utc(dur.as('milliseconds')).format('M [Months]'));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
&#13;
&#13;
&#13;

在上面的示例中需要注意的事项 - 它将向上。因此0.1的值为2 months