Как вы форматируете дату/время в 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

  1. Вы можете создать трубу, унаследованную от базы PipeTransform
  2. Затем реализовать метод преобразования

Используется в 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();