如何在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,所以它增加tz
到moment()
。
(你通常会为每一个你要使用的库安装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
做完这个之后就像魅力一样。