【问题标题】:Javascript date object, getDate(), getMonth() and getFullYear() of date object in IE and SafariJavascript日期对象,IE和Safari中日期对象的getDate()、getMonth()和getFullYear()
【发布时间】:2019-03-24 14:22:23
【问题描述】:

我在我的 Javascript 代码中使用此函数将 dateTime 对象格式化为字符串,此函数适用于 Firefox 和 Chrome,但不适用于 IE 和 Safari。 有谁知道该怎么做才能使它也适用于 Safari 和 IE?

日期对象在 Chrome 中如下所示:Mon Mar 25 2019 00:00:00 GMT+0100 (CET)

function formatDateTimeToString(date) {
  var dd = (date.getDate() < 10 ? '0' : '') + date.getDate();
  var MM = ((date.getMonth() + 1) < 10 ? '0' : '') + (date.getMonth() + 1);
  var yyyy = date.getFullYear();
  var hours = (date.getHours() < 10 ? '0' : '') + date.getHours();
  var minutes = (date.getMinutes() < 10 ? '0' : '') + date.getMinutes();
  return (dd + "." + MM + "." + yyyy + ' ' + hours + ':' + minutes);
}

console.log(formatDateTimeToString(new Date()));

【问题讨论】:

  • 使用moment.js怎么样
  • 你在 safari 和 IE 中得到了什么
  • 我得到了 NaN.NaN。 ...在 Safari 和 IE 中
  • moment如何解决这个问题?
  • "date 对象看起来像这样..." Date 对象只是一个数字(一个时间值)和一些方法,直到最近,默认的字符串表示还依赖于实现。正如 Trincot 所说,检查您的问题是否与解析无关,因为 OP 中没有任何内容在实现之间应该有所不同。

标签: javascript date


【解决方案1】:

如果Safari的日期对象的生成方式与Chrome相同,那么至少在我的旧版Safari中代码运行成功,如下所示:

function formatDateTimeToString(date) {
var dd = (date.getDate() < 10 ? '0' : '') + date.getDate();
var MM = ((date.getMonth() + 1) < 10 ? '0' : '') + (date.getMonth() + 1);
var yyyy = date.getFullYear();
var hours = (date.getHours() < 10 ? '0' : '') + date.getHours();
var minutes = (date.getMinutes() < 10 ? '0' : '') + date.getMinutes();
               return (dd + "." + MM + "." + yyyy + ' ' + hours + ':' + minutes);
            }

var d = document;
d.w = d.writeln;
var date = new Date("Mon Mar 25 2019 00:00:00 GMT+0100 (CET)");

/* this works */
d.w( formatDateTimeToString(date)+"<BR>"); 

// output:
// 24.03.2019 16:00

如果您尝试使用包含连字符的字符串实例化 Date 对象,则可能会在 Safari 中得到 NaN,如下所示:

var d = document;
d.w = d.writeln;

date = new Date("2019-03-24");
/* returns NaN */
d.w( formatDateTimeToString(date)+"<BR>");

date = new Date("03-24-2019");
/* this fails with NaN*/
d.w( formatDateTimeToString(date)+"<BR>");

【讨论】:

  • 这似乎离题了。虽然问题可能是 OP 如何生成他们的日期,但问题始于一个 Date 对象,所以你/我们真的还不知道。这应该只是一个评论,关于解析已经有很多很多问题了。
猜你喜欢
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 2015-12-22
  • 2013-12-03
  • 1970-01-01
相关资源
最近更新 更多