【问题标题】:Date format YYYY-MM-DD not working in Safari日期格式 YYYY-MM-DD 在 Safari 中不起作用
【发布时间】:2012-01-03 23:28:28
【问题描述】:

Safari 无法识别日期格式 2012-01-03(即 2012 年 1 月 3 日)时遇到此问题。我有一个数组中的日期,然后我想将它们转换为这种格式 - 1 月 3 日星期二

在 Chrome 中工作,但 Safari 抛出 undefined undefined NaN

下面的一些代码...

(function() {
    var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
        months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sept','Oct','Nov','Dec'];
    Date.prototype.getDayName = function() {
        return days[this.getDay()];
    };
    Date.prototype.getMonthName = function() {
        return months[this.getMonth()];
    };
})();

var issues = ['2012-01-03', '2012-01-02', '2012-01-01', '2011-12-31'];

for (var i = 0; i < issues.length; i++) {
      var d = new Date(issues[i]);
      var date = d.getDate(),
      weekday = d.getDayName(),
      month = d.getMonthName();
      day = weekday + ' ' + month + ' ' + date;               
      $('.datepicker').find('ul').append('<li class="issue_' + i + '">' + day + '</li>');
}   

我只需要它为 Safari/Mobile Safari 工作,所以不喜欢使用任何 js 库。

【问题讨论】:

    标签: javascript date safari format


    【解决方案1】:

    简单的调试告诉你错误:

    var d = new Date(issues[i]);
    console.log(d);
    

    它不喜欢日期格式。你可以像这样改变它:

    var issues = ['01/03/2012', '01/02/2012', '01/01/2011', '12/31/2011'];
    

    或者您可以进行拆分并以所有浏览器都支持的格式进行操作

    var dateParts = issues[i].split(/-/);
    var d = new Date(dateParts[0],parseInt( dateParts[1], 10) -1,dateParts[2]);
    

    http://jsfiddle.net/TveJU/

    【讨论】:

      【解决方案2】:

      各种浏览器中的日期解析是出了名的不一致和挑剔。我一直使用 Datejs (http://www.datejs.com/),这是一个很好的小 js 库,它增强了内置的 Date 对象。看看吧。

      【讨论】:

      • 我需要做的事情太多了,我只专门针对 safari/mobile safari。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多