浅谈js的date对象对时间字符串的解析

遇见问题

最近的时间都在开发社团内部的应用–隧道口,虽然只有简单的几个页面,但是依然是遇到了不少坑。 其中 date 的时间处理就是一个。

简单说一下需求。。现在在做一个活动列表,后台传一个json,里面包含活动的列表数组。 我遍历数组并创建对应的视图显示,并且以月份作为分类标准。 展示一下后台拿来的数据

做起来并不难,我开始写了如下版本

data.forEach(function (value, index) {
                var ct = new Date();

                var st = new Date(value.activity_start_time);//活动开始时间
                var et = new Date(value.activity_end_time);//活动结束时间

                var sm = st.getMonth() + 1; //月份

                var sd = st.getDate();
                sd = sd < 9 ? '0' + sd: sd; //日

                var sh = st.getHours();
                sh = sh < 9 ? '0' + sh: sh; //时

                var sn = st.getMinutes();
                sn = sn < 9 ? '0' + sn: sn; //分

                //...省略

                var params = {
                    id: value.id,
                    poster: value.activity_pic_url,
                    title: value.activity_name,
                    association: value.association_name,
                    location: value.activity_location,
                    like: value.like,
                    comment: value.comment,
                    status: status,
                    sclass: sclass,
                    day: sd,
                    clock: sh + ':' + sn
                };
                //渲染
                tpl += Mustache.render(self.item_tlp, params);
                tpl += '</div>';

            });

当然,这段代码成功运行了,至少我觉得成功运行了。

很完美的成功了。

可是在ios下运行的结果就很不理想了

全是 NAN 有没有。 一开始以为是 数字与字符串相加造成的问题(尽管js是可以数字与字符串相加的) 用parseInt改了一遍发现不行,后台调试发现在ios下显示 Invalid Date,看来是不同平台的Date对字符串的解析能力不同啊。

解决问题

之后我在ie上测试发现了同样的问题(想不到ios和ie居然有同样坑的一天)。 查阅资料发现了问题所在,new Date(str) 对传进入的字符串有一定的格式要求,不同平台不一样,像我们后台传过来的时间格式是 20xx-xx-xx 00:00:00

new Date("20xx-xx-xx 00:00:00")

这种格式在人看来是很容易理解了,然后,部分浏览器却解析不了,而所有浏览器都能解析的格式是

new Date("20xx/xx/xx 00:00:00")

于是对后台传过来的数据修改成 year/month/day 的格式

var st = new Date(Date.parse(value.activity_start_time.replace(/-/g,"/")));
var et = new Date(Date.parse(value.activity_end_time.replace(/-/g,"/")));

大功告成。

## 总之呢,以后解析时间用 year/month/day 就好

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏灯塔大数据

技术 | Python从零开始系列连载(十五)

在Python中使用try...except 结构创建 ' 隔离区 ',也就是进行异常处理

931
来自专栏Golang语言社区

无辜的goroutine

简介: 本文主要是针对一些对于goroutine的“指控”提出我自己的看法,特别是轩脉刃的一篇博客文章《论go语言中goroutine的使用》提出了gorout...

36411
来自专栏Golang语言社区

【翻译】为什么 goroutine 的栈内存无穷大?

一些 Go 语言的新学习者总是会对 goroutine 栈内存占用大小感到非常好奇。这一般是由于程序员进行无限的函数循环调用导致的。为了说明这个问题,请思考以下...

3616
来自专栏Python入门

你还在为Python中文乱码而感到烦恼?今天老司机给你讲讲!

有没有遇到过这样的问题,读取文件被提示“UnicodeDecodeError”、爬取网页得到一堆乱码,其实这些都是编码惹的祸,如果不能真正理解编码的问题所在,就...

1683
来自专栏信数据得永生

JavaScript 编程精解 中文第三版 八、Bug 和错误

31310
来自专栏工科狗和生物喵

【计算机本科补全计划】指令:计算机的语言(MIPS) Part3

正文之前 今天学的很尴尬,因为有事情,而且新认识了两个计算机学院的保研大佬,不得不感叹我找的导师之强,第一个去上交的,是被金老师推荐去的,听说是跟了目前亚洲第一...

3238
来自专栏用户2442861的专栏

gcc和g++的区别

gcc 最开始的时候是 GNU C Compiler, 如你所知,就是一个c编译器。但是后来因为这个项目里边集成了更多其他不同语言的编译器,GCC就代表 the...

5201
来自专栏FreeBuf

逆向工厂(二):静态分析技术

* 本文原创作者:追影人,本文属FreeBuf原创奖励计划,未经许可禁止转载 前言 [逆向工厂]第一章节中介绍了逆向技术的相关基础知识,其中提到逆向的两种形式:...

4528
来自专栏ImportSource

必懂的NoSQL理论-Map-Reduce(中)

本文主要内容:分区和归并 上一文:必懂的NoSQL理论-Map-Reduce(上) Partitioning and Combining 分区和归并 在最简单...

3356
来自专栏Urahara Blog

Using get_defined_functions To Hidden A PHP Backdoor

1762

扫码关注云+社区

领取腾讯云代金券