如何在TypeScript中格式化日期?

19
Angular2(typescript)中执行new Date()时,我得到的日期是:DATEE Wed Jul 18 2018 09:13:40 GMT+0200。
问题是我把这个日期发送到了Java,但Java不支持这种格式。
Java仅支持dd/mm/aaaa或aaaa/mm/dd的格式,而不支持Wed Jul 18 2018 09:13:40 GMT+0200。
我尝试在Angular中创建一个新格式,但总是得到字符串,而我需要格式化日期,因为我的Java类获取日期。
let myDate: Date, myDay, myMonth, myYear;

myDate = new Date();
myDay  = myDate.setUTCFullYear;
console.log(myDay);
myDay  = myDate.toISOString;
console.log(myDay);
console.log(typeof(myDay));
console.log(new Date(myDay));

我不能安装 Angular 默认没有的库,例如:"moment"。


1
可能是重复的问题 如何格式化JavaScript日期 - Manwal
5个回答

68
你可以使用Angular的DatePipe。在你想要格式化的组件中:add
providers: [DatePipe]

然后导入类

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

然后在构造函数中注入{{it技术}}。

constructor(public datepipe: DatePipe){}

然后在代码中,您可以像这样进行格式化

this.datepipe.transform(this.dueDate, 'yyyy/MM/dd')

将日期格式从 'yyyy/MM/dd' 更改为任何您需要的格式


嗨,console.log(typeof(this.datepipe.transform(dueDate, 'yyyy/MM/dd'))); 是字符串类型,我需要日期类型。 - EduBw
4
@EduBw - 你说你想要“格式化”日期。格式化后的日期是一个字符串。如果你想要一个日期,那它就只是一个日期,没有被格式化过。 - T.J. Crowder
我说:“但是我需要格式化日期,因为我的Java类获取日期。” - EduBw
你不能直接将 TypeScript 的 Date 值转换为 Java 的 Date 值。你必须使用 DatePipe 将 TypeScript 的 Date 格式化为字符串表示形式。在 Java 中,你可以接收或读取此日期的字符串表示形式,并使用 Dateformater 解释该字符串为 Java 的 Date 值。 - IVleafclover

6
你可以使用new Date().toLocaleString() => "2016/11/10 上午11:49:36",然后使用string.slice来获取你想要的字符串部分。

toLocaleString是字符串,我需要日期类型。 - EduBw

3

编辑:

如果您不想使用任何库,那么可以使用内置的Angular的DatePipe

按照以下步骤使用datePipe:

1:导入DatePipe:

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

2:将 **DatePipe** 添加到模块的提供程序中:

NgModule({
      providers: [DatePipe]
    })
    export class AppModule {
    }

您可以将datePipe添加到组件的提供商中:
@Component({
      selector: 'target-selector',
      styleUrls: ['./target.component.css'],
      templateUrl: './target.component.html',
      providers: [DatePipe]
    })
    export class TargetComponent {
    ...

3: 现在将它注入到构造函数中:

constructor(private datePipe: DatePipe) {
}

4: 准备使用:

this.datepipe.transform(this.myDate, 'yyyy/MM/dd');

或者

 this.datepipe.transform(this.myDate, 'MM/dd/yyyy');

1
OP 表示无法使用库。 - Philipp Sander
嗨,我无法安装任何东西。 - EduBw
好的,我错过了。 - Shubham Verma
1
你的编辑本质上是已接受答案的重复。 - Jerry
之前没有在组件上添加过“providers”,我认为这个答案提供了很好的上下文信息,与被接受的答案不同。 - James Skemp

1

在类型 'HomeComponent' 上不存在属性 'datepipe'。你是指 'datePipe' 吗?ts(2551)

我遇到了上述问题,没有声明 datePipe。


1
你可能需要在你的模块中声明 datePipe 作为一个提供者才能使用它。 - iamaword

0

我想更详细地回答这个问题,而不是回答最初的问题,即如何在Typescript中格式化日期。

出现的问题是,您无法读取Typescript提供的日期。解决方法不是在Typescript中格式化日期,因为这仍将导致字符串,因为格式化日期会转换为字符串。相反,您需要使用Java中的函数解析字符串日期本身,然后您将拥有一个日期变量。

当您将日期作为响应发送到Java或任何其他语言时,日期总是会被转换为字符串。对于任何不是字符串、整数或布尔值的自定义变量(假设您的响应是JSON格式),都是如此。

解决您的问题的方法是只需发送日期,然后使用SimpleDateFormat(format).parse(date)来格式化日期,其中format是您想要的格式,date是日期的字符串表示形式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接