为什么我的'很久以前'滤镜在chrome中工作,而不是safari或firefox
Why does my 'time ago' filter work in chrome and not safari or firefox?
我在应用程序中使用这个角度过滤器来获取时间戳,并将其转换为"时间前"时间,例如"3小时前"。我发现这个过滤器是github的要旨,并将其分叉,使其能够从UTC转换为最终用户的本地时间。现在我可以弄清楚为什么它似乎只在chrome中工作(注意:我也不知道原版是否在chrome之外工作过(。Safari和Firefox在很长一段时间内从我的应用程序中输出所有可用的时间,从几分钟前到几周前。有什么想法吗?
app.filter('timeago', function () {
//time: the time
//local: compared to what time? default: now
//raw: whether you want in a format of "5 minutes ago", or "5 minutes"
return function (time, local, raw) {
var timeZoneOffset = (new Date().getTimezoneOffset()) * 60000;
if (!time) return "never";
if (!local) {
(local = Date.now());
}
if (angular.isDate(time)) {
time = time.getTime();
} else if (typeof time === "string") {
// convert string time to milliseconds
time = new Date(time).getTime();
}
// convert UTC to local
time = time - timeZoneOffset;
if (angular.isDate(local)) {
local = local.getTime();
}else if (typeof local === "string") {
local = new Date(local).getTime();
}
if (typeof time !== 'number' || typeof local !== 'number') {
return;
}
var span = [],
MINUTE = 60,
HOUR = 3600,
DAY = 86400,
WEEK = 604800,
MONTH = 2629744,
YEAR = 31556926,
DECADE = 315569260;
var offset = Math.abs((local - time) / 1000);
if (offset <= MINUTE) span = [ '', raw ? 'now' : 'a minute' ];
else if (offset < (MINUTE * 60)) span = [ Math.round(Math.abs(offset / MINUTE)), 'min' ];
else if (offset < (HOUR * 24)) span = [ Math.round(Math.abs(offset / HOUR)), 'hr' ];
else if (offset < (DAY * 7)) span = [ Math.round(Math.abs(offset / DAY)), 'day' ];
else if (offset < (WEEK * 52)) span = [ Math.round(Math.abs(offset / WEEK)), 'week' ];
else if (offset < (YEAR * 10)) span = [ Math.round(Math.abs(offset / YEAR)), 'year' ];
else if (offset < (DECADE * 100)) span = [ Math.round(Math.abs(offset / DECADE)), 'decade' ];
else span = [ '', 'a long time' ];
span[1] += (span[0] === 0 || span[0] > 1) ? 's' : '';
span = span.join(' ');
if (raw === true) {
return span;
}
return (time <= local) ? span + ' ago' : 'in ' + span;
};
});
编辑:
以下是我如何在html中使用它的浓缩示例,以及我的api返回日期字符串的格式。如果其他人没有问题,这可能与日期字符串如何转换为毫秒时间有关。
角度控制器内的时间
$scope.time = "2014-07-04 23:04:12";
从html
<span>{{ time | timeago }}</span>
firefox 显示
"在很长一段时间内">
Date.parse可能依赖于实现。基于这篇SO文章和推荐,我修改了自定义的parseDate函数,并验证了它在IE、Chrome和Firefox上都能工作。
app.controller('ctrl', function($scope) {
// parse a date in yyyy-mm-dd format
function parseDate(input) {
var parts = input.split('-');
var timeBits = parts[2].split(' ');
var hms = timeBits[1].split(':');
// new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
return new Date(parts[0], parts[1]-1, timeBits[0], hms[0], hms[1], hms[2]); // Note: months are 0-based
}
$scope.time = parseDate("2014-07-04 23:04:12");
alert($scope.time);
});
我也遇到了同样的问题。对我来说,带时区的日期格式不起作用。
"2014-07-04 23:04:12 GMT"
不起作用
"2014/07/04 23:04:12 GMT"
这起作用
相关文章:
- onbeforeunload和asp:Safari和FireFox中的更新面板
- 在Firefox上使用聚合物的javascript依赖关系的HTML导入困难;Safari
- 元素意外地隐藏在Safari的某些实例中,总是出现在Firefox、Chrome中
- JS适用于Firefox和Safari,但不适用于Chrome.此处'是我的网站
- 有没有一种方法可以在过滤掉iOS Chrome、Firefox和其他浏览器的同时检测iOS safari
- 异步加载的SVG过滤器feColorMatrix在Chrome中工作,而不是在Safari或Firefox中
- JavaScript函数在Safari中有效,但在Firefox中找不到
- Chrome,Safari在从本地存储读取时挂起,而Firefox很好
- 支持 JavaScript 的检查例程适用于 Chrome/Opera/IE,但不适用于 Firefox/Safari
- RGB 到 HEX JavaScript 函数在 Chrome 中工作,但不能在 Firefox 或 Safari 中工
- window.onbeforeunload在IE8中不触发(在Firefox,Chrome和Safari中工作正常)
- window.dispatchEvent 在 Firefox、Safari 或 IE 中不起作用
- jQuery放大版不适用于Chrome和Safari,但适用于Firefox
- style.display无法在Chrome、Safari-Firefox、IE11中正常工作
- getComputedStyle报告Chrome / Safari / Firefox和IE11之间的不同高度
- Javascript Pouch DB doesn't load on Safari & Firefox
- OSX safari/firefox上的原型日期格式验证错误
- Iframe不能与safari/firefox一起工作
- 在Safari, Firefox和Chrome中工作的代码,但不能在IE(对齐)中工作
- 试图建立会计计算器,但javascript不能在safari/firefox上工作