如何在angular2应用程序中包含时区 – 时区

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

1.安装包

npm安装时刻 – 时区 – 保存

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文件

 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不存在types'矩'

这可能有帮助。

运行以下命令进行angular-cli或npm安装。

sudo npm安装瞬间时刻 – 保存
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. } 

更新了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是故意不安装或导入,因为它是moment-timezone的依赖。

那个错误说,Typescript编译器在moment的types定义( .tz(...)上找不到.tz(...)方法。

所有你需要做的就是安装moment-timezone的types,所以它增加tzmoment()

(你通常会为每一个你要使用的库安装types,其中一些例如angular和moment,他们的types定义文件embedded在libs的源文件中,这样就免除了安装types的需要。 )

所以,如前所述,只要安装moment-timezone的types:

 # if you have typings version 1.XX typings install moment-timezone --save --global # if you have typings version 0.XX typings install moment-timezone --save --ambient 

而一切都应该工作…如果你再做一件事:

将你的configuration从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编译器将用来查找types定义的名称。 你安装的类​​型定义了一个叫做“ moment-timezone的模块,而不是“ moment-timezone

之后,使用:

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

这应该是全部。


PS:在上面的设置中,你的编译器会从DefinitelyTyped仓库(typings.json)中selectmoment的来源和moment-timezone的types( tz函数)。

但有时候,他们打得不好。 如果这发生在你身上,你必须从DefinitelyTyped存储库(typings.json)的源代码中重写moment的types。

换句话说:

 # Only do this if installing moment-timezone alone didn't work... # if you have typings version 1.XX typings install moment moment-timezone --save --global # if you have typings version 0.XX typings install moment moment-timezone --save --ambient 

我有同样的问题,并做了acdcjuniorbuild议的一切,但也不得不安装时刻节点typings:

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

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