如何在Angular 2类中使用moment-timezone?

16

我正试图在我的类中使用moment-timezone。 这是我的类型。

"moment": "github:DefinitelyTyped/DefinitelyTyped/moment/moment.d.ts#a1575b96ec38e916750629839d2110cb96210f89",
"moment-timezone": "github:DefinitelyTyped/DefinitelyTyped/moment-timezone/moment-timezone.d.ts#f8a90040348e83926f44e690b209769c4f88b961"

我的导入:

import * as moment from 'moment';
import * as tz from 'moment-timezone';

我的使用方法:

var jun = moment("2014-06-01T12:00:00Z");
jun.tz('America/Los_Angeles').format('ha z');

我的错误:

Property 'tz' does not exist on type 'Moment'.
5个回答

13

13

请尝试这段代码:

import * as moment from 'moment-timezone';

   export class Page1 {  

     public setdate = moment(); // today date
     constructor(){
       this.setdate.tz("Asia/Singapore").format('YYYY-MM-DD HH:mm:ss');
       console.log(this.setdate.tz("Asia/Singapore").format('YYYY-MM-DD HH:mm:ss'));
     }
   }

10

我曾经遇到同样的问题,并通过以下方式解决:

输入以下内容(ambientDependencies):

"moment": "registry:dt/moment#2.8.0+20160316155526",
"moment-timezone": "github:DefinitelyTyped/DefinitelyTyped/moment-timezone/moment-timezone.d.ts#f8a90040348e83926f44e690b209769c4f88b961"

导入:

import * as moment from 'moment';
import 'moment-timezone'

使用方法:

moment("2014-06-01T12:00:00Z")
  .tz('America/Los_Angeles')
  .format('ha z');

基本上,我在moment导入对象上执行.tz()函数(实际上不存在),但是moment-timezone的导入扩展了它的附加功能。

我还使用systemjs-plugin-json来正确加载包含时区定义的json对象,该对象位于moment-timezone库中。

希望这有所帮助。


直接导入将会增加约1MB的构建大小。请小心。 - Pian0_M4n

8

我将为2020年进行更新。

$ npm install moment-timezone @types/moment-timezone

import moment from 'moment-timezone';

...

// do this - outside of any class is fine    
moment.tz.add('America/Los_Angeles|PST PDT|80 70|01010101010|1Lzm0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0');


...

someMethod() {
    const m = moment(the_date);
    ...
    const mFormatted = m.tz('America/Los_Angeles').format('YYYY-MM-DDTHH:mm:ssZZ');
}

时区定义可以在https://github.com/moment/moment-timezone/blob/develop/data/packed/latest.json找到。我使用它来定义自己的时区,而不是读取所有的时区。


1
谢谢,这非常有帮助。然而,我发现最新的moment-timezone包中的index.js文件加载了所有最新的数据。因此,定义自己的数据是多余的。 - Brady Isom
是的,但这样你会不必要地加载它们所有。如果只需要一个额外的行,那么添加一个并不难。如果需要10行额外代码,预定义的解决方案可能更好。 - HankCa

0

使用

import moment from 'moment-timezone';

这个导入修复了我项目中很多奇怪的问题。


为什么?
moment-timezone 包中,您可以看到
require("moment-timezone") === require("moment")
export = moment;

moment-timezone\index.d.ts文件的结尾处。


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