2017-01-06 2 views
0

Я форматирую существующую дату, используя Angular.js, но ее единственная работающая в хром. Я объясняю свой код ниже.

$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', cf. [этот отказ от ответственности] (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. & then вы можете прямо использовать что-то вроде этого <$ timestamp | date: "MM/dd/yyyy hh: mm a" $>. Это работает во всех браузерах, поскольку это фильтр даты angularjs. – ba1ar

+0

. Вы можете посмотреть библиотеку [moment] (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"); 
Смежные вопросы