Date 对象在尝试计算 IE8 中两个日期之间的时间时返回 NaN
Date object returns NaN when trying to calculate time between two dates in IE8
我有一个字符串,它表示一个项目的到期时间,如下所示:2020-10-31T21:30:11
,我有一个函数来计算距离该日期还剩的天数(如下)。
但是,在IE8中它不起作用。我认为这是因为timeEnd
正在返回NaN
.有人可以解释为什么这不起作用并指出我正确的方向吗?
我这里有一个jsFiddle。
这是我的代码片段:
.HTML
<span class="days-left" data-publishend="2020-10-31T21:30:11"></span>
.JS
$('.days-left').each(function () {
if ($(this).data("publishend")) {
var timeEnd = new Date($(this).data("publishend")), // returns NaN in IE8
timeNow = new Date(),
oneDay = 24*60*60*1000,
oneHour = 60*60*1000,
oneMin = 60*1000,
daysLeft = Math.floor(Math.abs(timeEnd.getTime() - timeNow.getTime()) / oneDay),
hoursLeft = Math.floor(Math.abs(timeEnd.getTime() - timeNow.getTime()) / oneHour),
minsLeft = Math.floor(Math.abs(timeEnd.getTime() - timeNow.getTime()) / oneMin),
string;
if (daysLeft < 1) {
if (hoursLeft < 1.5) {
string = minsLeft + ' minutes';
} else {
string = hoursLeft + ' hours left';
}
}
if (daysLeft === 1) string = '1 day left';
if (daysLeft > 1) string = daysLeft + ' days left';
$(this).text(string);
}
});
你是
对的,IE8不会在开始时解析你的日期(timeEnd init)。原因如下: https://stackoverflow.com/a/17593482/2143734还有一个日期处理问题;)
试试这个
function parseISO8601(dateStringInRange) {
var isoExp = /^'s*('d{4})-('d'd)-('d'd)'s*$/,
date = new Date(NaN), month,
parts = isoExp.exec(dateStringInRange);
if(parts) {
month = +parts[2];
date.setFullYear(parts[1], month - 1, parts[3]);
if(month != date.getMonth() + 1) {
date.setTime(NaN);
}
}
return date;
}
进行转换。
来源:Date 构造函数在 IE 中返回 NaN,但在 Firefox 和 Chrome 中工作
通过查看这个 Stackoverflow 问题的答案,我已经掌握了正在发生的事情并创建了自己的函数来处理我想要转换日期对象的字符串。
IE8 不能像其他浏览器那样2020-10-31T21:30:11
解析字符串。但是 date 对象可以接受表示年、月、日等的逗号分隔值,并使用它们创建新实例(有关 Date 对象的详细信息)。
所以我创建了一个函数,它获取我的字符串,将其吐在"T"处,然后将剩余的值拆分为"-"或":"。然后,该函数使用这些值作为参数返回日期对象实例。
function parseDateString(dateString) {
var a = dateString.split('T'),
year = a[0].split('-')[0],
month = a[0].split('-')[1],
day = a[0].split('-')[2],
hour = a[1].split(':')[0],
min = a[1].split(':')[1];
return new Date(year, month - 1, day, hour, min);
}
相关文章:
- 如何在javascript中获取两个日期之间的周六和周日的日期
- 如何用moment.js列出两个日期之间的所有月份
- 我希望这个日期选择器可以从1990年到2000年之间的年份中选择日期
- moment.js在两个时区格式的日期之间存在差异
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 用时间戳获取两个不同日期之间的时间差
- JavaScript函数,用于计算两个日期之间的年、月和天数
- 再次使用JavaScript计算两个日期之间的天数
- Mongoose查询在两个日期时间之间提取数据
- 在Javascript中计算两个日期之间的工作日,节假日除外
- 在Jquery或Javascript中获取两个范围或日期之间的通信周数
- 如何使用moment.js获取24小时内日期之间的时差
- 两个日期之间的差异
- JavaScript-计算两个日期之间的天数(包括结束日期)
- 在 JavaScript 中单击函数时两个日期类型输入之间的差异的代码
- Ext 4.2.1 模型日期解析在浏览器之间不一致
- 夏令时期间不起作用的 2 个日期之间的小时差异
- 如何在javascript中计算两个日期时间之间的差异
- 考虑到夏令时,Java和JavaScript之间“日期”交换的最佳实践
- 给定一个开始日期和结束日期,创建一个包含这两个日期之间日期的数组