通常我们服务器端的时间使用UTC格式,避免服务器的时区对最终的时间产生影响。而客户端需要根据具体的时区显示local time,本文将介绍如何将服务器的UTC time(基于asp.net web api实现的web service)与客户端的local time(基于ionic实现的hybrid app)进行相互转换。

1. Convert UTC time to local time

应用场景:通常在请求结束之后,把服务器的数据转换成本地数据。

在service中定义filter,需要传入连个参数:utc格式的时间字符串和转换格式。

.filter('utcToLocal', function utcToLocal($filter) {
return function (utcDateString, format) {
if (!utcDateString) {
return;
} if (utcDateString.indexOf('Z') === -1 && utcDateString.indexOf('+') === -1) {
utcDateString += 'Z';
} return $filter('date')(utcDateString, format);
};
})

在页面中使用filter:

<p>{{item.triggeredTimeString|utcToLocal:"yyyy-MM-dd HH:mm:ss"}}</p>

如何在directives中使用呢?需要重新定义utcToLocal函数,调用如下。注意:需要在根指令处声明$filter。

var utcToLocal = function(utcDateString) {
if (!utcDateString) {
return;
} if (utcDateString.indexOf('Z') === -1 && utcDateString.indexOf('+') === -1) {
utcDateString += 'Z';
} return $filter('date')(utcDateString, "yyyy-MM-dd HH:mm:ss");
} $filter('date')(utcDateString, "yyyy-MM-dd HH:mm:ss");

2. Convert local time to UTC time

应用场景:通常调用服务发送数据时使用。

2.1 定义一个函数,使用UTC Date的构造函数来生成UTC时间。

var toUTCDate = function(date){
var _utc = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
return _utc;
}; var localTime = new Date();
var utcTime = toUTCDate(localTime);
$log.info(localTime);
$log.info(utcTime);

2.2 直接使用库函数toUTCString:

var localTime = new Date();
var utc = localTime.toUTCString();

2.3 使用Moment.js

var localTime = new Date();
moment.utc(localTime);

2.4 扩展库函数,封装addDays和convertToUtcString:

Date.prototype.convertToUtcString = function() {
return (this.getUTCMonth()+1) + "-" + this.getUTCDate() + "-" + this.getUTCFullYear() + " " + this.getUTCHours() + ":" + this.getUTCMinutes() + ":" + this.getUTCSeconds();
} Date.prototype.convertToLocalString = function() {
return (this.getMonth()+1) + "-" + this.getDate() + "-" + this.getFullYear() + " " + this.getHours() + ":" + this.getMinutes() + ":" + this.getSeconds();
} Date.prototype.getYtdUtcString = function() {
return "1-1-" + this.getFullYear() + " 12:00:00";
} Date.prototype.addDays = function(num) {
var value = this.valueOf();
value += 86400000 * num;
return new Date(value);
}

参考资料:

http://stackoverflow.com/questions/31778624/converting-local-time-into-utc-time-in-angularjs

https://github.com/urish/angular-moment

http://stackoverflow.com/questions/31785364/converting-date-from-local-time-zone-to-utc-and-then-to-local

第十九章:UTC time和local time的互换的更多相关文章

  1. Python之路【第十九章】:Django进阶

    Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...

  2. 【C++】《C++ Primer 》第十九章

    第十九章 特殊工具与技术 一.控制内存分配 1. 重载new和delete new表达式的工作机理: string *sp = new string("a value"); //分 ...

  3. 第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器

    原文:第十九章--使用资源调控器管理资源(1)--使用SQLServer Management Studio 配置资源调控器 本系列包含: 1. 使用SQLServer Management Stud ...

  4. 第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器

    原文:第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 前言: 在前一章已经演示了如何使用SSMS来配置资源调控器.但是作为DBA,总有需要写脚本的时候,因为它可以重用及扩展. ...

  5. 第十九章 Django的ORM映射机制

    第十九章 Django的ORM映射机制 第一课 Django获取多个数据以及文件上传 1.获取多选的结果(checkbox,select/option)时: req.POST.getlist('fav ...

  6. Gradle 1.12用户指南翻译——第四十九章. Build Dashboard 插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  7. Gradle 1.12翻译——第十九章. Gradle 守护进程

    有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...

  8. Gradle 1.12用户指南翻译——第二十九章. Checkstyle 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  9. Gradle 1.12用户指南翻译——第三十九章. IDEA 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  10. “全栈2019”Java多线程第二十九章:可重入锁与不可重入锁详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

随机推荐

  1. Android 动态改变图片的颜色值

    public void onViewClicked(View view) { switch (view.getId()) { case R.id.bt1: img1.setColorFilter(ge ...

  2. android获取USB设备的名称

    1.注释内 .是三星设备可能不支持,需要更换的代码. 2.mUsbManager.是getSystemService(Context.USB_SERVICE)获的. 3. 从stackoverflow ...

  3. MVC5中 在更新 Microsoft.Aspnet.Identity 后编译器错误

    环境:vs2013预览版chs,我试着创建vb.net web应用,从对话框中选择MVC和WebAPI.编译ok了.通过NuGet管理器更新了Microsoft.Aspnet.Identity.Cor ...

  4. Oracle排序函數Rank

    出口給報關行出貨的時候,同一票shipment中合併多個invoice跟packing,轉出到廠商的報關系統時候,出口報關的序號會將invoice的序號做自動增加. 因為wafer會有出口給其他外包做 ...

  5. ubuntu 14.04 x64下安装libreoffice

    LibreOffice是ubuntu 上的办公软件很多人都知道微软公司的的Word.Excel.PowerPoint和Outlook,但是很少有人知道LibreOffice. LibreOffice靠 ...

  6. chkconfig的原理 和添加开机自启动的办法

    当我们使用 chkconfig --list的时候 都会又  123456 这样的级别. 当某个级别是 on 他就会开机启动,当他是off 的时候他就不会开机自启动. 那么这是什么原因呢?他的 原理是 ...

  7. Selenium API(二)

    1.定位一组元素 WebDriver提供了8种定位一组元素的方法. driver.find_elements_by_css_selector() driver.find_elements_by_tag ...

  8. servlet-mysql实现简单用户登录注册

    环境:IDEA Maven 效果截图: 项目结构: 类说明: ConnectionUtil:负责数据库连接和释放 UserDao:数据库增删改查操作 User:用户Bean,只用注册和登录的话可以不要 ...

  9. April Fools Day Contest 2019 A. Thanos Sort

    A. Thanos Sort time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  10. c++多线程基础5(future,async,packaged_task,promise)

    以下内容整理自:https://www.cnblogs.com/my_life/articles/5401190.html future 是一个能从其他地方获取到一个值的对象,如果是在不同的线程中,则 ...