在TypeScript中格式化日期/时间

时间:2016-11-10 11:08:13

标签: javascript typescript

我在尝试使用TypeScript中的Date对象来格式化我想要的方式时遇到了一些麻烦。

我有一个课程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文档,但是我&# 39;我非常确定TypeScript在幕后使用的是什么。

12 个答案:

答案 0 :(得分:24)

如果您想要超时以及您想要的日期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

答案 1 :(得分:9)

  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 
  }
}

答案 2 :(得分:6)

选项1: Momentjs:

安装:

npm install moment --save

导入:

import * as moment from 'moment';

用法:

let formattedDate = (moment(yourDate)).format('DD-MMM-YYYY HH:mm:ss')

选项2:如果使用Angular,请使用DatePipe:

导入:

import { DatePipe } from '@angular/common';

用法:

const datepipe: DatePipe = new DatePipe('en-US')
let formattedDate = datepipe.transform(yourDate, 'DD-MMM-YYYY HH:mm:ss')

答案 3 :(得分:5)

我建议您使用MomentJS

随着时间的推移你可以有很多输出,而这一个09/11/2015 16:16就是其中之一。

答案 4 :(得分:2)

这里是Angular的另一种选择(使用自己的格式设置功能)-该选项适用于格式:

YYYY-mm-dd hh:nn:ss

-您可以调整格式,只需重新排列行并更改分隔符即可

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 :(得分:2)

如果你需要它的角度,最简单的代码最少的方法是:

u8

答案 6 :(得分:0)

再添加一个@kamalakar的答案,需要在app.module中导入相同的答案,并将DateFormatPipe添加到提供程序。

    import {DateFormatPipe} from './DateFormatPipe';
    @NgModule
    ({ declarations: [],  
        imports: [],
        providers: [DateFormatPipe]
    })

答案 7 :(得分:0)

import numpy as np

import matplotlib.pyplot as plt

import cv2

img = cv2.imread("foot.jpeg")

blur = cv2.blur(img,(5,10))

rows,cols,ch = img.shape

pts1 = np.float32([170,270],[480,220],[240, 710],[540,650])
pts2 = np.float32([0,0],[210,0],[0,297],[210,297])

M = cv2.getPerspectiveTransform(pts1,pts2)

dst = cv2.warpPerspective(img,M,(210,297))

plt.subplot(121),plt.imshow(img),plt.title('Input')

plt.plot(*zip(*point), marker='.', color='r', ls='')

plt.subplot(122),plt.imshow(dst),plt.title('Output')

plt.show()

答案 8 :(得分:0)

对于 Angular ,您应该只使用formatDate而不是DatePipe

import {formatDate} from '@angular/common';

constructor(@Inject(LOCALE_ID) private locale: string) { 
    this.datePipeString = formatDate(Date.now(),'yyyy-MM-dd',this.locale);
}

答案 9 :(得分:-1)

这对我有用

    /**
     * Convert Date type to "YYYY/MM/DD" string 
     * - AKA ISO format?
     * - It's logical and sortable :)
     * - 20200227
     * @param Date eg. new Date()
     * https://stackoverflow.com/questions/23593052/format-javascript-date-as-yyyy-mm-dd 
     * https://stackoverflow.com/questions/23593052/format-javascript-date-as-yyyy-mm-dd?page=2&tab=active#tab-top
     */
    static DateToYYYYMMDD(Date: Date): string {
        let DS: string = Date.getFullYear()
            + '/' + ('0' + (Date.getMonth() + 1)).slice(-2)
            + '/' + ('0' + Date.getDate()).slice(-2)
        return DS
    }

您当然可以添加HH:MM这样的内容...

    static DateToYYYYMMDD_HHMM(Date: Date): string {
        let DS: string = Date.getFullYear()
            + '/' + ('0' + (Date.getMonth() + 1)).slice(-2)
            + '/' + ('0' + Date.getDate()).slice(-2)
            + ' ' + ('0' + Date.getHours()).slice(-2)
            + ':' + ('0' + Date.getMinutes()).slice(-2)
        return DS
    }

答案 10 :(得分:-2)

对我来说最好的解决方案是来自@Kamalakar的自定义管道,但稍作修改以允许传递格式:

import { Pipe, PipeTransform} from '@angular/core';
import { DatePipe } from '@angular/common';

@Pipe({
    name: 'dateFormat'
  })
  export class DateFormatPipe extends DatePipe implements PipeTransform {
    transform(value: any, format: any): any {
       return super.transform(value, format);
    }
  }

然后称为:

console.log('Formatted date:', this._dateFormatPipe.transform(new Date(), 'MMM/dd/yyyy'));

答案 11 :(得分:-9)

我有类似的问题,我用这个解决了

.format();