如何在Angular 2 App中包含moment-timezone

时间:2016-07-30 14:09:01

标签: node.js angular angular2-directives angular-moment

我意识到,这个问题是重复的,但前一次没有提供适当的答案 时刻包已经安装

1.安装包

npm install moment-timezone --save

node_modules 目录中
|
| --moment
| --moment-时区

目录

2 Index.html 包含脚本

<script src="node_modules/moment-timezone/moment-timezone.js"></script>

System.config.js

  var map = {
    'moment':             'node_modules/moment',
    'momentzone':         'node_modules/moment-timezone'
  };
  var packages = {
    'moment':             { defaultExtension: 'js' },
    'momentzone':         { defaultExtension: 'js' }
  };

3.Inside component.ts file

import * as moment from 'moment/moment';

export class TimeComponent implements OnInit{
   ngOninit(){
         console.log(moment("2014-06-01T12:00:00Z").tz('America/Los_Angeles').format('ha z'));

   }
}

应该导入什么来防止错误 属性tz在“Moment”类型

上不存在

6 个答案:

答案 0 :(得分:19)

这可能会有所帮助。

为angular-cli或npm install运行以下命令。

sudo npm install moment moment-timezone --save
npm install @ types / moment @ types / moment-timezone --save-dev

表示npm systemjs.config.js

   map: {
        'moment': 'npm:moment',
        'moment-timezone': 'npm:moment-timezone/builds'
      }
packages: { 
      'moment': {
          main: './moment.js',
          defaultExtension: 'js'
       },
      'moment-timezone': {
        main: './moment-timezone-with-data-2010-2020.min.js',
        defaultExtension: 'js'
      }
}

你想在.ts文件中使用时区

import * as moment from 'moment-timezone';

@Component({
  selector: 'my-app',
  template: `<h1>Hello {{name}}</h1>`,
})

export class AppComponent {    
  name = 'Angular';
  jun = moment();// creating obj.
  constructor() {
    this.jun.tz('America/Los_Angeles').format('hh : mm : ss a z');
    console.log(this.jun.tz('America/Los_Angeles').format('hh : mm : ss a z'));
    console.log(moment.tz.names()); // for all time zone.
  }

答案 1 :(得分:16)

更新了Angular 4

在命令行上安装moment-timezone

npm i -S moment-timezone

在您的组件中导入moment-timezone

import * as moment from 'moment-timezone';

根据文档使用它:

this.time = moment().tz('America/New_York').format('HH:mm:ss z')
  

美国东部夏令时间16:20:42

文档

moment docs

moment timezone docs

  

注意:moment故意未安装或导入,因为它是moment-timezone的依赖项。

答案 2 :(得分:1)

要在2018年为Angular安装瞬间时区

  1. 安装moment.js和moment-timezone

    objstr22 = `{20181218-20181228={currencyCode=USD, totalPrice=469.4, formattedPrice=$469, cheapest=false}, 20181218-20181226={currencyCode=USD, totalPrice=469.4, formattedPrice=$469, cheapest=false}, 20181218-20181227={currencyCode=USD, totalPrice=451.4, formattedPrice=$451, cheapest=false}}`; objstr22 = objstr22 .replace(/ /g, "") .replace(/([\-\w\d]+)=/g, '"$1"=') .replace(/=([\w\d\.\$]+)/g, ':"$1"') .replace(/=([[{])/g, ":$1"); console.log(objstr22); let obj22 = JSON.parse(objstr22); for (o of Object.keys(obj22)) { console.log(o, obj22[o]); }

  2. 将这些模块导入您的.ts文件

    {responseType: ResponseContentType.Blob }

Github问题:How to resolve the 'tz' build error.

答案 3 :(得分:0)

该错误表明Typescript编译器无法在.tz(...)的类型定义(类型)上找到moment方法。

您需要做的只是安装moment-timezone的打字,因此会将tz添加到moment()

(你通常会为你将要使用的每个lib安装一个类型。有些东西,比如angular和moment,它们的类型定义文件嵌入libs的源代码中,从而使你无需安装他们的类型。)

所以,如上所述,只需安装moment-timezone的打字:

# if you have typings version 1.X.X
typings install moment-timezone --save --global

# if you have typings version 0.X.X
typings install moment-timezone --save --ambient

一切都应该有效......如果你再做一件事:

将您的配置从momentzone重命名为moment-timezone(并添加.js个文件):

var map = {
    'moment':                  'node_modules/moment/moment.js',
    'moment-timezone':         'node_modules/moment-timezone/moment-timezone.js'
};
var packages = {
    'moment':                  { defaultExtension: 'js' },
    'moment-timezone':         { defaultExtension: 'js' }
};

这是必需的,因为您在此处使用的名称是您将在import中使用的名称。您在import中使用的名称是typescript编译器用于查找类型定义的名称。您安装的打字定义了一个名为moment-timezone的模块,而不是momentzone

之后,使用:

import * as moment from 'moment';
import 'moment-timezone'; // since this module only has side-effects, this is enough

应该是全部。


PS。:在上面的设置中,您的编译器将从moment的源和moment的输入(moment-timezone函数)中选择tz的输入来自DefinitelyTyped存储库(typings.json)。

但有时,他们并不好玩。如果您遇到这种情况,则必须使用来自DefinitelyTyped存储库(typings.json)的moment类型的来源覆盖moment的源代码。

换句话说:

# Only do this if installing moment-timezone alone didn't work...

# if you have typings version 1.X.X
typings install moment moment-timezone --save --global

# if you have typings version 0.X.X
typings install moment moment-timezone --save --ambient

答案 4 :(得分:0)

我遇到了同样的问题,并做了acdcjunior建议的所有事情,但也必须安装时刻节点的输入:

typings install dt~moment-node --save --global

这样做之后就像魅力一样。

答案 5 :(得分:0)

这就是我用的

moment(currentTime).tz(timeZone);

这是一个正在工作的Stackblitz https://stackblitz.com/edit/angular-moment-timezone-23