通常我们服务器端的时间使用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. CSS3的2D与3D转换

    2D和3D转换涉及到数学中的知识,作为一个数学专业的毕业生,不研究一下岂不是对不起自己的专业? 首先来看几个参数: 1.transform-origin:origin(起源,起点),也即变形的起点,在 ...

  2. ajax data参数

    表单 使用serializeArray获取所有: <form id='addForm' action='UserAdd.action' type='post'> <label for ...

  3. [vscode] github travis 集成问题

    问题log $ npm install -npm ERR! 404 Not Found npm ERR! 404 npm ERR! 404 'types/mocha' is not in the np ...

  4. Job-Show Liang,你来掌管诺基亚王国,可好?

    保留我一向高大上风格,开头当然来一个段子 在即将到来MWC(Mobile World Congress缩写,世界移动通信大会),很高兴能听到小诺来参展,我不得不给它32个赞,因为小诺已经好几届没有浮头 ...

  5. 课后练习Javascript

    <script type="text/javascript"> alert (isNaN(prompt("输入个数字进来","只能输入数字 ...

  6. 说一下我认识的*nix下的服务器热重启

    步骤: 第一: 收到SIGTERM以后现在的服务器监听socket停止accept 但是并没有停止listen,这个很关键.(所以客户端发起的tcp连接的syn得不到synack,只是继续等待,而不会 ...

  7. windows10 docker 使用以及虚拟机下fastDFS 的使用教程

    我们 先来了解下 什么是docker?   Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相 ...

  8. rest_framwork中ApiView实现分页

    from rest_framework.pagination import PageNumberPagination from .serializers import BookSerilizer fr ...

  9. bzoj 3895: 取石子

    $ \color{#0066ff}{ 题目描述 }$ Alice和Bob两个好朋含友又开始玩取石子了.游戏开始时,有N堆石子 排成一排,然后他们轮流操作(Alice先手),每次操作时从下面的规则中任选 ...

  10. SQL Server为啥使用了这么多内存?

    原文地址:http://support.microsoft.com/gp/anxin_techtip6/zh-cn SQL Server为啥使用了这么多内存? SQL Server的用户,常常会发现S ...