apicloud apicloud

注册
查看: 6363|回复: 15

[APP开发技巧] 一种方便灵活的转换时间格式的方法

业余车手

UID:22414

主题:
8
帖子:
815
云币:
12667

版主勋章APICloud粉丝

[APP开发技巧] 一种方便灵活的转换时间格式的方法

6363 15 | 发表于 2015-8-30 21:06:50 |阅读模式 | |
本帖最后由 yyyfx 于 2015-8-30 21:09 编辑

从官方数据库中读取的时间格式是类似于 2015-08-27T07:00:00.000Z07 这样的格林威治时间。
这个时间不仅可读性很差,而且比北京时间慢 8 个小时。有没有办法,将这个时间转换成比较方便易读的格式?

下面这个方法,十分简单,自定义的时间格式也十分灵活,推荐使用
  1.     // 对Date的扩展,将 Date 转化为指定格式的String   
  2.     // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,   
  3.     // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)   
  4.     // 例子:   
  5.     // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423   
  6.     // (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18   
  7.     Date.prototype.Format = function(fmt) { //author: meizz   
  8.       var o = {   
  9.         "M+" : this.getMonth()+1,                 //月份   
  10.         "d+" : this.getDate(),                    //日   
  11.         "h+" : this.getHours(),                   //小时   
  12.         "m+" : this.getMinutes(),                 //分   
  13.         "s+" : this.getSeconds(),                 //秒   
  14.         "q+" : Math.floor((this.getMonth()+3)/3), //季度   
  15.         "S"  : this.getMilliseconds()             //毫秒   
  16.       };   
  17.       if(/(y+)/.test(fmt))   
  18.         fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));   
  19.       for(var k in o)   
  20.         if(new RegExp("("+ k +")").test(fmt))   
  21.       fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
  22.       return fmt;   
  23.     }

  24.     var time = new Date('2015-08-27T14:40:21.926Z');
  25.     var timeString = time.Format("yyyy-MM-dd hh:mm:ss");
  26.     alert(timeString);
复制代码
p.s. Date() 会自动将时间转换本地时间


2

查看全部评分

主题:
133
帖子:
1156
云币:
2077
发表于 2016-1-18 22:13:05 |
具体应该怎么用呢?

var time1 = new Date();
alert(time1);


Date()是这样的:


var now = new Date().getTime();
alert(now);

Date().getTime()是这样的:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一切都正常

主题:
133
帖子:
1156
云币:
2077
发表于 2016-1-18 22:23:29 |
要写在apiready的外面。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一切都正常

主题:
133
帖子:
1156
云币:
2077
发表于 2016-1-18 22:26:11 |
那。。。。数据库的updatedAt时间记录取出来,怎么格式化成2016-01-18  22:25:12,这种格式?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一切都正常

主题:
133
帖子:
1156
云币:
2077
发表于 2016-1-18 22:29:59 |
直接使用,会报错的:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一切都正常

主题:
133
帖子:
1156
云币:
2077
发表于 2016-1-18 22:38:02 |
被model.findAll的回调取出来,createdAt的类型应该就不是Date,而是String了。
所以, 要用Date.parse转换一下,然后用new Date包一下,才是Date类型,然后才可以用Format(不是format)格式化。

"remark": new Date(Date.parse(ret.updatedAt)).Format("yyyy-MM-dd hh:mm:ss"),



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一切都正常

新手上路

UID:196221

主题:
11
帖子:
84
云币:
192
发表于 2016-3-4 14:32:12 |
复制7楼的代码报6楼的错

业余车手

UID:22414

主题:
8
帖子:
815
云币:
12667

版主勋章APICloud粉丝

 楼主| 发表于 2016-3-5 08:50:00 |
搜农 发表于 2016-3-4 14:32
复制7楼的代码报6楼的错

直接按照我在帖子中讲到的方法使用即可,像这样

  1. var time = new Date('2015-08-27T14:40:21.926Z');
  2. var timeString = time.Format("yyyy-MM-dd hh:mm:ss");
  3. alert(timeString);
复制代码

新手上路

UID:124789

主题:
14
帖子:
99
云币:
533
发表于 2016-3-6 08:40:49 来自手机 |
这个尝试成功了

新手上路

UID:211082

主题:
2
帖子:
3
云币:
12
发表于 2016-3-6 20:13:22 |
尝试了类似的方法,在安卓端可以。。咋在IOS端就不能用了呢??
12下一页
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表