【问题标题】:getMinutes() 0-9 - How to display two digit numbers?getMinutes() 0-9 - 如何显示两位数?
【发布时间】:2012-01-20 00:41:15
【问题描述】:
var date = "2012-01-18T16:03";
var date = new Date(date);

console.log(date.getMinutes());
console.log(date.getMinutes().length)

这将返回 3。

  1. 如何让它返回“03”?
  2. 为什么.length 返回未定义?

我试过了,但是没用:

如果strlen == 1 那么num = ('0' + num);

【问题讨论】:

  • 只是加起来,.getMinutes()的返回是一个整数,你不能从整数访问.length。要做到这一点(在处理日期时不推荐)是将数字解析为字符串,然后检查长度。例如:date.getMinutes().toString().length

标签: javascript


【解决方案1】:
var date = new Date("2012-01-18T16:03");

console.log( (date.getMinutes()<10?'0':'') + date.getMinutes() );

【讨论】:

【解决方案2】:

哎呀,这些答案都不是很好,即使是顶帖也有上升。在这里,跨浏览器和更清晰的 int/string 转换。另外,我的建议是不要使用带有 date = Date(...) 之类的代码的变量名称“日期”,因为您严重依赖语言区分大小写(它有效,但是当您使用不同语言的服务器/浏览器代码时存在风险不同的规则)。所以假设 var current_date 中的 javascript 日期:

mins = ('0'+current_date.getMinutes()).slice(-2);

该技术是将“0”中最右边的两个字符(slice(-2)) 附加到getMinutes() 的字符串值上。所以:

"0"+"12" -> "012".slice(-2) -> "12"

"0"+"1" -> "01".slice(-2) -> "01"

【讨论】:

  • 使用 slice(-2) 是违反直觉的,但我喜欢它。
【解决方案3】:

另一种简短的方法是使用前导零填充分钟:

String(date.getMinutes()).padStart(2, "0");

含义:使字符串长两个字符,如果缺少一个字符,则在此位置设置0

请参阅str.padStart(targetLength, padString) 的文档

【讨论】:

  • 这么好的答案
  • 哇!这就是我一直在寻找的答案
  • 虽然我真的很喜欢这个答案,但不幸的是它对我不起作用(在 Tasker Jslet 中,记录在案)。接受的答案是解决方法,但万无一失!
  • 我不经常对此发表评论,但我不得不说这是手头问题的正确答案。对于一个整数,5和05没有区别,只有当你想把值当作字符串处理时才重要,在这种情况下,你需要使用字符串函数。
【解决方案4】:

优雅的 ES6 函数将日期格式化为hh:mm:ss

const leadingZero = (num) => `0${num}`.slice(-2);

const formatTime = (date) =>
  [date.getHours(), date.getMinutes(), date.getSeconds()]
  .map(leadingZero)
  .join(':');

【讨论】:

    【解决方案5】:

    如果可以的话,我想为这个问题提供一个更简洁的解决方案。接受的答案非常好。但我会这样做。

    Date.prototype.getFullMinutes = function () {
       if (this.getMinutes() < 10) {
           return '0' + this.getMinutes();
       }
       return this.getMinutes();
    };
    

    现在如果你想使用它。

    console.log(date.getFullMinutes());
    

    【讨论】:

      【解决方案6】:

      使用 ECMAScript 国际化 API,more info

      const date_string = "2012-01-18T16:03";
      const date = new Date(date_string);
      const twoDigitMinutes = date.toLocaleString("en-us", {year: 'numeric', month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit', second: "2-digit"});
      
      console.log(twoDigitMinutes);

      【讨论】:

      • 2020 年 11 月来到这里,这是最安全的答案!
      【解决方案7】:

      我建议:

      var minutes = data.getMinutes();
      minutes = minutes > 9 ? minutes : '0' + minutes;
      

      少了一个函数调用。考虑性能总是好的。 它也很短;

      【讨论】:

        【解决方案8】:

        另一种选择:

        var dateTime = new Date();
        var minutesTwoDigitsWithLeadingZero = ("0" + dateTime.getMinutes()).substr(-2);
        

        【讨论】:

        【解决方案9】:

        你应该检查它是否小于10...不要寻找它的长度,因为这是一个数字而不是一个字符串

        【讨论】:

          【解决方案10】:

          我假设您需要将值作为字符串。您可以使用下面的代码。 它总是返回给你两位数的分钟作为字符串。

          const date_string = "2012-01-18T16:03";
          const date = new Date(date_string);
          let min = date.getMinutes();
          
          if (min < 10) { // or min = min < 10 ? '0' + min : min;
             min = '0' + min;
          } else {
             min = min + '';
          }
          
          console.log(min);

          希望这会有所帮助。

          【讨论】:

            【解决方案11】:

            .length 未定义,因为getMinutes 返回的是数字,而不是字符串。数字没有length 属性。你可以这样做

            var m = "" + date.getMinutes();

            要使其成为字符串,然后检查长度(您可能需要检查length === 1,而不是0)。

            【讨论】:

              【解决方案12】:

              数字没有长度,但您可以轻松地将数字转换为字符串,检查长度,然后在必要时添加 0:

              var strMonth = '' + date.getMinutes(); 如果(strMonth.length == 1){ strMonth = '0' + strMonth; }

              【讨论】:

                【解决方案13】:

                我在这里没有看到任何 ES6 答案,所以我将使用 StandardJS 格式添加一个

                // ES6 String formatting example
                const time = new Date()
                const tempMinutes = new Date.getMinutes()
                const minutes = (tempMinutes < 10) ? `0${tempMinutes}` : tempMinutes
                

                【讨论】:

                  【解决方案14】:

                  这个怎么样?这个对我有用! :)

                  var d = new Date();
                  var minutes = d.getMinutes().toString().replace(/^(\d)$/, '0$1');
                  

                  【讨论】:

                    【解决方案15】:

                    const date_string = "2012-01-18T16:03";
                    const date = new Date(date_string);
                    const dd = date.getDate();
                    const MM = date.getMonth();
                    const mm = date.getMinutes();
                    const HH = date.getHours();
                    
                    // Year
                    const year = date.getFullYear();
                    
                    // Month
                    const month = ("0" + (MM + 1)).slice(-2); // first month start from 0, so add +1
                    
                    // Day
                    const day = ("0" + dd).slice(-2);
                    
                    // Hour
                    const hour = ("0" + HH).slice(-2);
                    
                    // Minutes
                    const minutes = ("0" + mm).slice(-2);
                    
                    // Seconds
                    const seconds = ("0" + mm).slice(-2);
                    
                    console.log(year, month, day, hour, minutes, seconds);

                    【讨论】:

                      【解决方案16】:

                      我通常使用这段代码:

                      var start = new Date(timestamp),
                          startMinutes = start.getMinutes() < 10 ? '0' + start.getMinutes() : start.getMinutes();
                      

                      它与@ogur 接受的答案非常相似,但在不需要 0 的情况下不会连接空字符串。不确定它更好。只是另一种方法!

                      【讨论】:

                        【解决方案17】:
                        $(".min").append( (date.getMinutes()<10?'0':'') + date.getMinutes() );
                        

                        JS 新手,所以这很有帮助 最关注这个问题的人也是新的 所以这就是我如何让它显示在名为“class=“min”的div中

                        希望对某人有所帮助

                        【讨论】:

                          【解决方案18】:

                          获得两位数分钟或小时的另一种选择。

                          var date = new Date("2012-01-18T16:03");
                          
                          var minutes = date.toTimeString().slice(3, 5); 
                          var hours   = date.toTimeString().slice(0, 2); 
                          

                          【讨论】:

                            【解决方案19】:

                            您可以使用moment.js

                            moment(date).format('mm')

                            示例:moment('2019-10-29T21:08').format('mm') ==&gt; 08

                            希望对某人有所帮助

                            链接github
                            https://github.com/moment/moment/

                            【讨论】:

                            • 非常好当有人在使用时刻,谢谢:-)
                            【解决方案20】:

                            两位数分钟使用: new Date().toLocaleFormat("%M")

                            【讨论】:

                            【解决方案21】:

                            如果您在项目中使用 AngularJS,只需注入 $filter 并像这里一样使用它:

                            $filter('date')(value, 'HH:mm')
                            

                            您还可以在模板中格式化输出,更多关于过滤器here

                            【讨论】:

                              猜你喜欢
                              • 2012-09-07
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2013-05-15
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多