Как вы форматируете дату/время в TypeScript?
У меня возникли проблемы с попыткой получить объект Date
в TypeScript, чтобы отформатировать способ, которым я его хочу.
У меня есть Module
класса, который определяется как:
export class Module {
constructor(public id: number, public name: string, public description: string,
public lastUpdated: Date, public owner: string) { }
getNiceLastUpdatedTime(): String {
let options: Intl.DateTimeFormatOptions = {
day: "numeric", month: "numeric", year: "numeric",
hour: "2-digit", minute: "2-digit"
};
return this.lastUpdated.toLocaleDateString("en-GB", options) + " " + this.lastUpdated.toLocaleTimeString("en-GB", options);
}
}
Когда я вызываю метод со следующим кодом:
let date = new Date(1478708162000); // 09/11/2016 16:16pm (GMT)
let module = new Module(1, "Test", "description", date, "test owner");
console.log(module.getNiceLastUpdatedTime());
В итоге я получаю следующее:
'9 November 2016 16:16:02 GMT'
Я хочу видеть:
09/11/2015 16:16
Я просмотрел документацию по адресу: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString, и я все еще не вижу, что я делаю неправильно (я знаю, что это документация JavaScript API, но я уверен, что то, что TypeScript использует под капотом).
Ответы
Ответ 1
Если вам нужен тайм-аут, а также дата, когда вы хотите Date.toLocaleString()
.
Это было прямо из моей консоли:
> new Date().toLocaleString()
> "11/10/2016, 11:49:36 AM"
Затем вы можете ввести строки локалей и форматировать строку, чтобы получить точный результат, который вы хотите.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
Ответ 2
- Вы можете создать трубу, унаследованную от базы PipeTransform
- Затем реализовать метод преобразования
Используется в Angular 4 - это работает. Лучший способ отформатировать дату - это труба.
Создайте свой собственный канал, как это:
import { Pipe, PipeTransform} from '@angular/core';
import { DatePipe } from '@angular/common';
@Pipe({
name: 'dateFormat'
})
export class DateFormatPipe extends DatePipe implements PipeTransform {
transform(value: any, args?: any): any {
///MMM/dd/yyyy
return super.transform(value, "MMM/dd/yyyy");
}
}
и он используется в классе TypeScript следующим образом:
////my class////
export class MyComponent
{
constructor(private _dateFormatPipe:DateFormatPipe)
{
}
formatHereDate()
{
let myDate = this._dateFormatPipe.transform(new Date())//formatting current ///date here
//you can pass any date type variable
}
}
Ответ 3
Я предлагаю вам использовать MomentJS
С моментом у вас может быть много выходов, и это один из 11 сентября 09/11/2015 16:16
.
Ответ 4
Вот еще один вариант для Angular (используя собственную функцию форматирования) - этот для формата:
ГГГГ-мм-дд чч: нн: сс
-you можно настроить в соответствии с вашими форматами, просто измените порядок строк и измените разделители
dateAsYYYYMMDDHHNNSS(date): string {
return date.getFullYear()
+ '-' + this.leftpad(date.getMonth() + 1, 2)
+ '-' + this.leftpad(date.getDate(), 2)
+ ' ' + this.leftpad(date.getHours(), 2)
+ ':' + this.leftpad(date.getMinutes(), 2)
+ ':' + this.leftpad(date.getSeconds(), 2);
}
leftpad(val, resultLength = 2, leftpadChar = '0'): string {
return (String(leftpadChar).repeat(resultLength)
+ String(val)).slice(String(val).length);
}
Для текущей отметки времени используйте вот так:
const curTime = this.dateAsYYYYMMDDHHNNSS(new Date());
console.log(curTime);
Будет выводить, например: 2018-12-31 23:00:01
Ответ 5
Еще один, чтобы добавить ответ @kamalakar, нужно импортировать то же самое в app.module и добавить DateFormatPipe к провайдерам.
import {DateFormatPipe} from './DateFormatPipe';
@NgModule
({ declarations: [],
imports: [],
providers: [DateFormatPipe]
})
Ответ 6
function _formatDatetime(date: Date, format: string) {
const _padStart = (value: number): string => value.toString().padStart(2, '0');
return format
.replace(/yyyy/g, _padStart(date.getFullYear()))
.replace(/dd/g, _padStart(date.getDate()))
.replace(/mm/g, _padStart(date.getMonth() + 1))
.replace(/hh/g, _padStart(date.getHours()))
.replace(/ii/g, _padStart(date.getMinutes()))
.replace(/ss/g, _padStart(date.getSeconds()));
}
function isValidDate(d: Date): boolean {
return !isNaN(d.getTime());
}
export function formatDate(date: any): string {
var datetime = new Date(date);
return isValidDate(datetime) ? _formatDatetime(datetime, 'yyyy-mm-dd hh:ii:ss') : '';
}
Ответ 7
<div> {{myDate | date:'short'}} </div>
//typescript
export class sampleDate {
myDate: Date.now();
}
Ответ 8
У меня была аналогичная проблема, и я решил с этим
.format();