【问题标题】:Date format convert javascript日期格式转换javascript
【发布时间】:2013-07-18 00:39:31
【问题描述】:

我正在尝试使用 javascript 将“2013 年 7 月 24 日”转换为“DD-MM-YYYY”,但我不断收到错误消息。

我正在使用new Date('July 24 2013').format("DD-MM-YYYY");

我错过了什么?

【问题讨论】:

    标签: javascript jquery date format


    【解决方案1】:

    Bellow 是基于 Java 日期格式的简单、可移植、纯 JS 实现:

    function date_format( d, p ) {
        var pad = function (n, l) {
            for (n = String(n), l -= n.length; --l >= 0; n = '0'+n);
            return n;
        };
        var tz = function (n, s) {
            return ((n<0)?'+':'-')+pad(Math.abs(n/60),2)+s+pad(Math.abs(n%60),2);
        };
        return p.replace(/([DdFHhKkMmSsyZ])\1*|'[^']*'|"[^"]*"/g, function (m) {
            l = m.length;
            switch (m.charAt(0)) {
                    case 'D': return pad(d.getDayOfYear(), l);
                    case 'd': return pad(d.getDate(), l);
                    case 'F': return pad(d.getDayOfWeek(i18n), l);
                    case 'H': return pad(d.getHours(), l);
                    case 'h': return pad(d.getHours() % 12 || 12, l);
                    case 'K': return pad(d.getHours() % 12, l);
                    case 'k': return pad(d.getHours() || 24, l);
                    case 'M': return pad(d.getMonth() + 1, l );
                    case 'm': return pad(d.getMinutes(), l);
                    case 'S': return pad(d.getMilliseconds(), l);
                    case 's': return pad(d.getSeconds(), l);
                    case 'y': return (l == 2) ? String(d.getFullYear()).substr(2) : pad(d.getFullYear(), l);
                    case 'Z': return tz(d.getTimezoneOffset(), ' ');
                    case "'":
                    case '"': return m.substr(1, l - 2);
                    default: throw new Error('Illegal pattern');
            }
        });
    };
    console.log( date_format( new Date(), 'yyyy.mm.dd kk:MM:ss Z' ) );
    console.log( date_format( new Date(), 'MM/dd/yyyy HH:mm:ss' ) );
    

    以上代码基于http://llamalab.com/js/date/Date.js (LGPL)

    【讨论】:

      【解决方案2】:

      Date 对象没有.format() 方法。 如果您积极使用日期和时间,我建议您使用 MomentJS 库。 它有很多有用的功能来处理时间和日期。

      例如:moment('July 24 2013', 'MMMM D YYYY').format('MMMM D YYYY, h:mm:ss a');

      【讨论】:

      • 那东西太棒了!谢谢
      【解决方案3】:

      JavaScript 中没有 Data.prototype.format 函数。

      您最好查看用于本地化日期的开源选项。我已经成功了

      还有:

      【讨论】:

        【解决方案4】:

        为了简化一点......问题是因为浏览器用于存储日期的格式并不总是相同的(并且您传递给 Date 构造函数的格式是不允许的)。标准允许,要求浏览器能够解析自己产生的格式(见§15.9.4.2)。

        通常直接使用日期格式并不是一个好主意,这不仅是因为特定于浏览器的实现,而且还因为全球化(对于具有虚拟全球受众的 Web 应用程序尤其如此)。

        您确定每个浏览器都会读取的唯一格式是 YYYY-MM-DDTHH:mm:ss.sssZ(请参阅 §15.9.1.15),因此在您的情况下,您应该将自定义解析/格式更改为该格式。

        查看thisthis SO 上的帖子了解其他详细信息(或this little tutorial 了解日期)。

        如果您使用跨浏览器和语言环境的日期,我的建议是使用一个好的库来抽象所有这些细节。我发现this one 非常强大且易于使用(它取代了标准 Date 函数,因此您甚至可能不需要更改一行代码)。

        【讨论】:

          【解决方案5】:

          我强烈建议使用momentjs

          moment('July 24 2013').format("DD-MM-YYYY");
          // => "24-07-2013"
          

          就这么简单!

          【讨论】:

          • 与我的建议相同,无论如何都要投票赞成正确的方法。
          猜你喜欢
          • 2012-06-05
          • 2017-10-12
          • 1970-01-01
          • 2012-03-09
          • 2012-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-03
          相关资源
          最近更新 更多