Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

移动端日期处理的一些问题 #213

Open
confidence68 opened this issue Aug 2, 2016 · 0 comments
Open

移动端日期处理的一些问题 #213

confidence68 opened this issue Aug 2, 2016 · 0 comments

Comments

@confidence68
Copy link
Owner

问题描述

移动端对于日期的处理,和pc端有点不同,例如pc端“2016-08-02”或者“2016/08/02”在移动端通常会被解析为“2016年8月2日”这种格式,这个我们可能经常遇到。最近就踩了这么一个坑。在pc端怎么测都可以的日期插件,但是在移动端就有问题了。下面我就来说说这个问题吧!

相关知识

在说这个问题之前,我们先来回顾一下日期插件的相关知识!关于日期,我前面写过2篇文章,分别是javascript时间格式format函数javascript时间戳函数,这两篇文章写的有点年头,我下面再来补充一些相关方面的知识吧!

例如:我在时间戳转为20160802这个格式的时候,自己封装了一个函数,如下:

function getLocalTime(nS) {
    var dataArray = new Date(parseInt(nS) * 1000).toLocaleDateString().split("/");
    dataArray[1] < 10 ? dataArray[1] = "0" + dataArray[1] : dataArray[1] = dataArray[1];
    dataArray[2] < 10 ? dataArray[2] = "0" + dataArray[2] : dataArray[2] = dataArray[2];
    return dataArray.join("");
}

问题就在这个函数了,toLocaleDateString(),在pc端生成的是2016/08/02这种格式,但是在移动端生成了2016年8月2日这种格式了。这点大家要注意。

日期转为时间戳,我们有如下两种方式:

一种是直接用如下

Date.parse(str)

这种方式虽然简单,但是网上说有兼容问题,相关文章请看:http://www.jianshu.com/p/800dcae4c0ae

另一种方式可以自己封装一个方式:

function transformTime(str) {
    str = str.replace(/-/g, '/');
    var time = (new Date(str)).getTime();
    return time / 1000;
}

案例说明

我做的日期插件截图如下:

enter image description here

上个月和下个月的时候,传入后台一个可否预约的值,然后后台返回日期和结果。传入后台格式是“20160802”这种格式,所以,需要我们对日期进行格式处理。

我们把上面的函数进行处理一下。如下:

function getLocalTime(nS) {
    var dateStr=new Date(parseInt(nS) * 1000).toLocaleDateString();
    dateStr=dateStr.replace(/年|月/g, "/").replace(/日/g,"");
    var dataArray = dateStr.split("/");
    dataArray[1] < 10 ? dataArray[1] = "0" + dataArray[1] : dataArray[1] = dataArray[1];
    dataArray[2] < 10 ? dataArray[2] = "0" + dataArray[2] : dataArray[2] = dataArray[2];
    return dataArray.join("");
}

或者这么写也可以

function getLocalTime(nS) {
    var dateStr=new Date(parseInt(nS) * 1000).toLocaleDateString();
    dateStr=dateStr.replace(/年|月/g, "/").replace(/日/g,"");
    var month = (new Date(dateStr)).getMonth() + 1;
    var year = (new Date(dateStr)).getFullYear();
    var date = (new Date(dateStr)).getDate();
    if (month < 10) {
        month = '0' + month;
    }
    if (date < 10) {
        date = '0' + date;
    }
    return year + month + date;
}

上面是介绍的2种方式,都是可以处理移动端和pc端所产生差异的!

今天关于移动端日期处理就说到这里,关键一点,大家在发现PC都对,移动有问题的时候,要考虑到是时间格式的问题!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant