此脚本在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/
答案 0 :(得分:1)
让我们看看MDN有关将日期字符串发送到Date
构造函数的说法。
MDN:全局对象:Date
语法
new Date(dateString)
;参数
<强>
dateString
强>表示日期的字符串值。该字符串应采用
Date.parse()
方法(IETF-compliant RFC 2822 timestamps和version of ISO8601)识别的格式。注意:由于浏览器差异和不一致性,强烈建议不要使用
Date
构造函数(和Date.parse
解析日期字符串,它们是等效的)
我们发现这种解析方法不可靠,并且强烈建议不要这样做,所以我们必须实现自己的解析或使用可以为我们做这件事的库。
只需解析给定字符串中的日期。
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;
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;
答案 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]);