<td>{{suite.testSuiteAttributes &&
suite.testSuiteAttributes.modifiedTimestamp | date: 'yyyy-MM-dd'
}}
</td>
Я хочу, чтобы формат даты был в формате CST «05 февраля 2018 г., 23:00:00 по центральному поясному времени». Но получаю сообщение об ошибке:
Unable to convert "2018-01-01-12:12:12:123456" into a date' for pipe 'DatePipe
Я думаю, это связано с тем, что timeStamp не в формате даты ... но получает только эту дату из бэкэнда. Пожалуйста, предложите.
Вы пытаетесь объединить тексты?
@Hakier, хорошо, я попробую использовать метод трубы
@shadowman_93 no.. использование && для обработки нулевых значений в массиве
modifiedTimestamp будет вашей датой, верно?
@TheParam да, это дата.. вот так.. 2018-01-01-12:12:12:123456”
дата, которую вы пытаетесь проанализировать, является недопустимой датой
@TheParam, как его можно преобразовать в действительную дату ??
напишите, что вам нужно написать собственный синтаксический анализатор или попросить бэкэнд команды предоставить действительную метку времени
Я написал для вас простой парсер, пожалуйста, проверьте ответ
@IanKemp .. спасибо .. как только я получу действительную дату, как я могу преобразовать ее в часовой пояс CT ??



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, что вы получаете неправильную дату формата с сервера. Вам нужна дата в допустимом формате, чтобы преобразовать ее
Итак, вот обходное решение вашей проблемы, где я написал метод myDateParser() для преобразования вашей недействительной даты в действительную дату.
ваш.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
modifiedTimestamp;
constructor(){
// Passing unformatter date
this.modifiedTimestamp = this.myDateParser('2018-01-01-12:12:12:123456');
}
/**
* Custom Date parser
*/
myDateParser(dateStr : string) : string {
// 2018-01-01T12:12:12.123456; - converting valid date format like this
let date = dateStr.substring(0, 10);
let time = dateStr.substring(11, 19);
let millisecond = dateStr.substring(20)
let validDate = date + 'T' + time + '.' + millisecond;
console.info(validDate)
return validDate
}
}
ваш.component.html
<table>
<tr>
<td>{{modifiedTimestamp | date: 'yyyy-MM-dd'}}</td>
</tr>
</table>
Надеюсь, это поможет!
Что {{suite.testSuiteAttributes && suite.testSuiteAttributes.modifiedTimestamp.toDate() | date: 'yyyy-MM-dd'}} делает? Он собирается вернуть логическое типизированное значение.
приятель, он просто проверяет, что testSuiteAttributes имеет значение null или нет, прежде чем обращаться к модифицированной временной метке
@TheParam Большое спасибо, приятель ... как я могу написать это в формате CT timeZOne, а также в формате Am / PM?
@TheParam, если я изменю {{modifiedTimestamp | date: 'dd-MMM-yyyy hh:mm:ss.sss}} дата выглядит как 2018/01/01 12:12:12.1212...1212 верно? значит, мы можем иметь 4 цифры в миллисекундах?
да дата имеет только 3 миллисекунды, поэтому вы можете отказаться от последних значений
{{modifiedTimestamp | date: 'yyyy-MM-dd h:mm a': 'CST'}} сделайте что-нибудь вроде, проверьте обновленный пример stackblitz
Как насчет добавления Z в конце новой строки даты? Хотя без него работает.
Ваша дата "2018-01-01-12:12:12:123456" не является допустимым Дата ISO 8601, поэтому ее нельзя проанализировать встроенным парсером. Либо используйте допустимый формат даты, либо напишите собственный синтаксический анализатор.
Вы можете использовать регулярное выражение или просто использовать строковые функции, такие как подстрока, как показано в другом ответе.
Даты в Javascript будут в локальном часовом поясе браузера, который является системным временем пользователя, нет собственного способа создать дату в другом часовом поясе. Вы можете создать дату в формате UTC и использовать toLocaleString() для преобразования ее в определенный часовой пояс. Зависит от того, находится ли дата, отправленная из бэкэнда, в формате UTC или CT. Если это CT, то это будет работать только для пользователей в часовом поясе CT.
let result = "2018-01-01-12:12:12:123456".match(/(\d{4})-(\d{2})-(\d{2})-(\d{2}):(\d{2}):(\d{2}):(\d{3})/).map(x => parseInt(x, 10));
result.shift();
console.info(new Date(...result).toLocaleString())... это дата, которую я получаю от бэкэнда... так что ничего не могу с этим поделать... не могли бы вы немного рассказать мне о написании пользовательского синтаксического анализатора.
Да, но можете ли вы объяснить, что здесь представляют 123456? миллисекундная часть может иметь максимум 3 символа. hh:mm:ss.sss. Не существует понятия миллисекунды больше 999.
это фиктивные данные, которые также могут быть неверными, пожалуйста, помогите с содержимым парсера, учитывая, что для его получения требуется всего три цифры, например, 05 февраля 2018 г., 23:00:00 по центральному поясному времени.
Вы должны преобразовать значение в Date, где вы получите их из бэкэнда, или написать Pipe, который будет преобразовывать это для вас.