2017-01-06 123 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"); 
相關問題