Date.prototype.getDay在Safari中不起作用

时间:2016-04-13 19:49:52

标签: javascript

此脚本在Chrome中运行良好,但我在Safari中未定义。你知道怎么解决吗?

var dateString = "2013-07-31 12:00:00";

var daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var whichDay = daysOfWeek[new Date(dateString).getDay()];

alert(whichDay);

JSfiddle:http://jsfiddle.net/utn3yyzc/

2 个答案:

答案 0 :(得分:1)

让我们看看MDN有关将日期字符串发送到Date构造函数的说法。

  

MDN:全局对象:Date

           

语法

     
    

new Date(dateString);

  
     

参数

     

<强> dateString

     

表示日期的字符串值。该字符串应采用Date.parse()方法(IETF-compliant RFC 2822 timestampsversion of ISO8601)识别的格式。

     
    

注意:由于浏览器差异和不一致性,强烈建议不要使用Date构造函数(和Date.parse解析日期字符串,它们是等效的)

  

我们发现这种解析方法不可靠,并且强烈建议不要这样做,所以我们必须实现自己的解析或使用可以为我们做这件事的库。

手动方式

只需解析给定字符串中的日期。

&#13;
&#13;
function parseDate(datestring) {
  var d = datestring.split(/\D+/g).map(function(v) { return parseInt(v, 10); });
  return new Date(d[0], d[1] - 1, d[2], d[3], d[4], d[5]);
}

var dateString = "2013-07-31 12:00:00";
var daysOfWeek = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ];
var whichDay = daysOfWeek[parseDate(dateString).getDay()];

alert(whichDay);
&#13;
&#13;
&#13;

图书馆(MomentJS)解决方案

&#13;
&#13;
var whichDay = moment('2013-07-31 12:00:00', 'YYYY-MM-DD HH:mm:ss').format('dddd');

alert(whichDay);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.12.0/moment.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

new Date(dateString)返回无效日期。

我建议以更明确的方式解析您的日期字符串(Safari似乎不支持此格式)。

例如:

var dateString = "2013-07-31 12:00:00";

var split = dateString.split(' ');
var dateSplit = split[0].split('-');
var hourSplit = split[1].split(':');

var d = new Date(dateSplit[0], dateSplit[1] - 1, dateSplit[2],     hourSplit[0], hourSplit[1], hourSplit[2]);