在Safari和IE浏览器的JavaScript日期对象问题(javascript date obj

2019-06-25 20:56发布

我正在从一个JSON对象的日期在2012-12-31的格式,并试图将其转换成友好的价值观和输出。

    var redeemableDate = item.Deal.RedeemableDate; //this is coming in the form of 2012-12-31
    var redeemableDate = new Date(redeemableDate);
    var rdDay = weekday[redeemableDate.getDay()]; //using an array with weekdays
    var rdDate = redeemableDate.getDate();
    var rdMonth = monthNames[redeemableDate.getMonth()]; //using an array with month names
    var rdYear = redeemableDate.getFullYear();

    response.write('Valid ' + rdDay + ' ' + rdDate + ' ' + rdMonth + ' ' + rdYear + ' ONLY');

的所有作品,发现和Firefox和Chrome花花公子,但Safari和IE(只在IE8测试通过为止)不喜欢它。

在FF和铬我得到预期的:

有效周日2 2012年9月ONLY

但在Safari和IE浏览器,我得到:

有效未定义的NaN NaN月NaN ONLY

当我提醒redeemableDate我已经将它设置为Date对象,Safari浏览器返回“无效的日期”和IE返回“男”之后。 这显然是其中的问题所在。 有没有一种方法我可以让我的值复制到这些浏览器约会对象?

Answer 1:

的YYYY-MM-DD(ISO 8601)的日期格式不Safari和IE支撑。 它的EcmaScript 5的一部分的,因此它应该只是一个时间问题。

一个解决方案是在传递的日期作为参数传递给日期。

var date = "2012-12-31".split("-");
var your_date = new Date(date[0], date[1]-1, date[2]);

需要注意的是月参数从零开始(一月份),所以你必须从字符串得到的值减去1。

编辑:对于一个快捷方式看到下面乔拉尔森答案。



Answer 2:

你最好自己解析日期字符串:

function dateFromISO( str ) {
  var d = null;
  str.replace(/^(\d\d\d\d)-(\d\d)-(\d\d)$/, function(_, y, m, d) {
    d = new Date(parseInt(y, 10), parseInt(m, 10) - 1, parseInt(d, 10));
  });
  return d;
}

redeemableDate = dateFromISO( redeemableDate );

即使其他浏览器那些喜欢日期字符串,你有他们的问题总是被解释为UTC。 对我来说,例如,当我传递字符串“2012-12-31”到Firefox,它告诉我,日期是2012年12月30日,因为我的背后UTC 6小时。 换句话说,“2012-12-31”被解释为日期,UTC时间的午夜。 假设你希望每个人都在世界上看到合适的日期,如果你构建Date对象与它的假设是在客户端本地时间数字。



Answer 3:

结合插孔和乔·拉尔森的响应,下面的代码工作很适合我:

        $scope.formatDate = function(date){
                var date = date.split("-").join("/");
                var dateOut = new Date(date);
                return dateOut;
        }; 

非常适用于Chrome和Safari ... :)
由于杰克和乔·拉森!



Answer 4:

旧的Internet Explorer版本(显然您的Safari浏览器的版本)将不会解析YYYY-MM-DD字符串,如new Date('2012-12-31')

另一种选择是jQuery.datepicker.parseDate()虽然这可能是有点矫枉过正。



Answer 5:

在使用PHP Web服务的情况下,我会建议使用返回日期$row['date'] = date('j/n/Y',strtotime($row['date'])); 有Safari浏览器/ IE正常功能。



文章来源: javascript date object issue in Safari and IE