【问题标题】:Javascript date - Leading 0 for days and months where applicableJavascript 日期 - 在适用的情况下,以 0 表示日期和月份
【发布时间】:2011-08-08 08:54:48
【问题描述】:

当日期或月份小于 10 时,是否有一种干净的方法可以在日期或月份前面添加 0:

var myDate = new Date();
var prettyDate =(myDate.getFullYear() +'-'+ myDate.getMonth()) +'-'+ myDate.getDate();

这将输出为:

2011-8-8

我希望它是:

2011-08-08

【问题讨论】:

标签: javascript date


【解决方案1】:

您似乎想要的格式看起来像 ISO。所以利用toISOString()

var d = new Date();
var date = d.toISOString().slice(0,10); // "2014-05-12"

【讨论】:

  • 谢谢。这实际上完美地满足了我的目的。
  • 最佳答案
  • 它可以稍微缩短:(new Date()).toISOString().slice(0,10);,但仍然是最好的答案。
【解决方案2】:

不,没有很好的方法可以做到这一点。你必须求助于:

var myDate = new Date();

var year = myDate.getFullYear();

var month = myDate.getMonth() + 1;
if(month <= 9)
    month = '0'+month;

var day= myDate.getDate();
if(day <= 9)
    day = '0'+day;

var prettyDate = year +'-'+ month +'-'+ day;

【讨论】:

  • 月份在 Date 中的索引为零,因此这会将任何月份向下移动一个档次(并在 1 月的情况下创建无效日期)。
【解决方案3】:
var myDate = new Date();
var m = myDate.getMonth() + 1;
var d = myDate.getDate();
m = m > 9 ? m : "0"+m;
d = d > 9 ? d : "0"+d;
var prettyDate =(myDate.getFullYear() +'-'+ m) +'-'+ d;

...和一个示例:http://jsfiddle.net/gFkaP/

【讨论】:

    【解决方案4】:

    你可以这样试试

    一天:

    ("0" + new Date().getDate()).slice(-2)
    

    月份:

    ("0" + (new Date().getMonth() + 1)).slice(-2)
    

    年份:

    new Date().getFullYear();
    

    【讨论】:

      【解决方案5】:

      您必须手动检查它是否需要前导零并在必要时添加它...

      var m = myDate.getMonth();
      var d =  myDate.getDate();
      
      if (m < 10) {
          m = '0' + m
      }
      
      if (d < 10) {
          d = '0' + d
      }
      
      var prettyDate = myDate.getFullYear() +'-'+ m +'-'+ d;
      

      【讨论】:

        【解决方案6】:

        是的,通过 Rumata 获取 String.js 然后使用:

        '%04d-%02d-%02d'.sprintf(myDate.getFullYear(),
                                 myDate.getMonth() + 1,
                                 myDate.getDate());
        

        注意:不要忘记月份字段上的+ 1Date 对象的月份字段从零开始,而不是从一开始!

        如果您不想使用额外的库,一个简单的内联函数将完成添加前导零的工作:

        function date2str(d) {
            function fix2(n) {
                return (n < 10) ? '0' + n : n;
            }
            return d.getFullYear() + '-' +
                   fix2(d.getMonth() + 1) + '-' +
                   fix2(d.getDate());
         }
        

        甚至将其添加到 Date 原型中:

        Date.prototype.ISO8601date = function() {
            function fix2(n) {
                return (n < 10) ? '0' + n : n;
            }
            return this.getFullYear() + '-' +
                   fix2(this.getMonth() + 1) + '-' +
                   fix2(this.getDate());
         }
        

        用法(见http://jsfiddle.net/alnitak/M5S5u/):

         var d = new Date();
         var s = d.ISO8601date();
        

        【讨论】:

        • 最佳答案,使用 sprintf,从没想过实现它
        • @lbu 在 String.js 中有 stacks 有用的函数,如果你正在做任何字符串操作,它是值得拥有的。
        • 在哪里可以下载 String.js?有效的问题,因为项目下载页面是空的。
        • @KalleH.Väravas 您需要在源浏览器中查看 - code.google.com/p/jsxt/source/browse/trunk/js/String.js
        • @Alnitak 我现在看到了,完美,你!
        【解决方案7】:

        对于月份, var month = ("0" + (myDate.getMonth() + 1)).slice(-2);

        对于白天, var day = ("0" + (myDate.getDate() + 1)).slice(-2);

        【讨论】:

          【解决方案8】:

          不幸的是,javascript 中没有内置的日期格式。使用现有库(例如 http://blog.stevenlevithan.com/archives/date-time-format)或构建自己的方法来添加前导零。

          var addLeadingZeroIfNeeded = function addLeadingZeroIfNeeded(dateNumber) {
                  if (String(dateNumber).length === 1) {
                      return '0' + String(dateNumber);
                  }
          
                  return String(dateNumber);
              },
              myDate = new Date(),
              prettyDate;
          
          prettyDate = myDate.getFullYear() + '-' + addLeadingZeroIfNeeded(myDate.getMonth()) + '-' + addLeadingZeroIfNeeded(myDate.getDate());
          

          编辑

          正如 Alnitak 所说,请记住我 JavaScript 从 0 而不是 1 开始的那一个月。

          【讨论】:

          • 您的代码不起作用 - 数字没有 .length 属性。
          • 我得到的月份不正确,源代码是必要的两倍。与我的回答中的date2str 进行比较。
          • 这取决于您传递给该方法的月份,该方法用于在需要的地方添加前导0,而不是处理月份。单一责任。但我会添加它以进行澄清。但是两倍的代码量是为了可读性,而不是优化。
          • JS 月份从零开始,而不是一。您的代码(就像这里的许多答案以及 OP 的代码一样)将显示错误的数字。
          【解决方案9】:

          最简单的方法是在前面加上zero,然后使用.slice(-2)。 使用此函数,您始终返回 string 的最后 2 个字符。

          var month = 8;

          var monthWithLeadingZeros = ('0' + month).slice(-2);

          查看此示例: http://codepen.io/Shven/pen/vLgQMQ?editors=101

          【讨论】:

            猜你喜欢
            • 2017-11-16
            • 2020-01-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多