2017-01-06 128 views
0

我使用Angular.js格式化现有日期,但它只能在chrome中工作。我在下面解释我的代码。

$scope.timestamp=2016-12-16 07:58:30 AM 
$scope.orginalTime= $filter('date')(new Date($scope.timestamp.replace("-","/")),'dd-MM-yyyy HH:mm:ss a'); 

在这里我格式化日期时间,但它只能在铬中工作。我需要这个应该可以在所有浏览器中工作,包括firefox,safari+MAC

+1

你验证,从'$ scope.timestamp.replace(...)的日期字符串'正确用'Date',比照分析[免责声明](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#Description)? Protip:提供的格式既不是RFC2822也不是ISO-8601语法,所以我认为你依赖于Chrome在解析中更宽容。考虑将日期分成几部分或格式为有效的格式。 – jensgram

+0

我建议你用yyyy-MM-ddTHH:mm:ssZ格式格式化日期。然后你可以直接使用这个<$ timestamp |日期:“MM/dd/yyyy hh:mm a”$>。这是在所有的浏览器工作,因为它是angularjs的日期过滤器 – ba1ar

+0

你可以看看[时刻](http://momentjs.com/docs/#/parsing/string-format/)库来解析你的时间戳一个常规的Date对象,你可以用'$ filter'格式化你想要的方式。 – SinDeus

回答

0

手动解析字符串总是比较好,因为结果在浏览器中不一致。你做这样的事

function parseDate(timestamp){ 

    raw = timestamp.split(" "); 
    date = raw[0].split("-"); 
    time = raw[1].split(":"); 
    month = parseInt(date[1]-1); 
    hour = raw[2] == "AM" ? time[0] : parseInt(time[0]) + 12; 

    return new Date(date[0], month, date[2], hour, 58, 30); 
} 

parseDate("2016-12-16 07:58:30 AM"); 
相关问题