【问题标题】:Compatible date formats for browser [duplicate]浏览器兼容的日期格式[重复]
【发布时间】:2015-12-19 12:21:31
【问题描述】:

我正在尝试使用以下方法显示“dd-mm-yyyy”日期格式

document.getElementById('engStartDate').value=endDate.toLocaleDateString('en-IN',options);

但我没有在 chrome 中获得所需的格式

Chrome:2016 年 6 月 11 日

火狐:2016 年 6 月 11 日

【问题讨论】:

  • 我的情况是它不在 chrome 中工作,但在 firefox 中工作
  • 这里有问题吗?

标签: javascript date


【解决方案1】:

它可能不会直接回答你的问题,但我建议你试试momentjs。它是一个 Javascript 库,可让您操作和格式化日期,并且不止一次地保存了我的隐藏。在你的情况下,你会做类似的事情

document.getElementById('engStartDate').value = moment(endDate).format('DD-MM-YYYY);

【讨论】:

  • 是的,我强烈推荐你使用momentjs
【解决方案2】:

Date.prototype.toLocaleString 不接受任何参数,结果完全取决于实现。

如果你想要一个特定的格式,你可以使用一个库,但不难写一个简单的函数来输出 dd-mm-yyyy 格式:

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

document.write(toDMY(new Date()));

还有ECMAScript Internationalization API 1.0 (ECMA-402)(也在MDN上),但是还没有得到很好的支持。

【讨论】:

    【解决方案3】:

    我强烈建议您手动操作或使用库。
    我写了一个格式数据时间的例子。

    var datetimeFormat = function ( datetime, formatStr) {
            var obj = null;
            if (({}).toString.call(datetime) === '[object Date]') {
                obj = datetime;
            } else {
                datetime = +datetime || 0;
                datetime = datetime < +new Date() / 100 ? datetime * 1000 : datetime;
                obj = new Date(datetime);
            }
            var str = formatStr;
            var Week = ['Sun', 'Mon', 'Tue', 'Wen', 'Tur', 'Fri', 'Sat'];
    
            str = str.replace(/yyyy|YYYY/, obj.getFullYear());
            str = str.replace(/yy|YY/,('0' + obj.getYear() % 100).slice(-2));
            var month = obj.getMonth() + 1;
            str = str.replace(/MM/, ('0' + month).slice(-2));
            str = str.replace(/M/g, month);
    
            str = str.replace(/w|W/g, Week[obj.getDay()]);
    
            str = str.replace(/dd|DD/, ('0' + obj.getDate()).slice(-2));
            str = str.replace(/d|D/g, obj.getDate());
    
            str = str.replace(/hh|HH/, ('0' + obj.getHours()).slice(-2));
            str = str.replace(/h|H/g, obj.getHours());
            str = str.replace(/mm/, ('0' + obj.getMinutes()).slice(-2));
            str = str.replace(/m/g, obj.getMinutes());
    
            str = str.replace(/ss|SS/, ('0' + obj.getSeconds()).slice(-2));
            str = str.replace(/s|S/g, obj.getSeconds());
            return str;
        }
    
    document.getElementById('engStartDate').value = datetimeFormat(new Date(), 'dd-MM-yyyy')
    &lt;input type='text' id='engStartDate'/&gt;

    【讨论】:

    • obj.getMinutes() &gt; 9 ? obj.getMinutes().toString() : '0' + obj.getMinutes()) 这样的表达式与('0' + obj.getMinutes()).slice(-2) 一样简单,避免了在一个表达式中调用相同的方法3 次。
    • @RobG 是的,这样更好更优雅。非常聪明,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多