【问题标题】:Date.prototype.getDay doesn't work in SafariDate.prototype.getDay 在 Safari 中不起作用
【发布时间】:2016-04-13 19:49:52
【问题描述】:

此脚本在 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/

【问题讨论】:

  • 也许这对你有帮助:stackoverflow.com/questions/3085937/…。 Safari 可能无法将 dateString 转换为有效的 Date 对象,然后你会得到 undefined。
  • console.log(new Date("2013-07-31 12:00:00")); 返回“无效日期”
  • 当 JS 程序无法按预期运行时,您应该做的第一件事是检查浏览器控制台是否有错误消息。这将有助于您理解问题。
  • 如果你需要解析非标准的日期格式,你应该考虑使用 moment.js。
  • 这里有一个可行的日期格式:jsfiddle.net/gLr6z8a4

标签: javascript


【解决方案1】:

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

MDN:全局对象:Date


语法

new Date(dateString);

参数

dateString

代表日期的字符串值。该字符串应采用Date.parse() 方法(IETF-compliant RFC 2822 timestampsversion 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);

库(MomentJS)解决方案

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

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

【讨论】:

    【解决方案2】:

    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]);
    

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 2019-07-12
      • 2013-08-17
      • 2015-05-12
      • 2012-12-15
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多