HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

iOS证书类型和功能

iOS证书

iOS证书有多种类型,在开发iOS APP中一定要清楚了解各种iOS证书的作用。

下面介绍iOS常用的几种证书的作用和申请方法。

1、iOS开发证书

iOS开发证书是用于测试APP,在开发过程中安装到苹果手机真机测试APP的运行情况。

2、iOS发布证书

当APP开发测试好后上线就需要用到iOS发布证书,用iOS发布证书打包的ipa才能上传到App Store审核。

3、iOS推送证书

iOS推送证书是用于推送通知的,平时我们在手机的系统栏下拉看到的那些消息就是推送通知,如果要做这个功能就需要配置推送证书。

常用的就是以上这三种iOS证书,当你需要什么功能的时候就知道用哪个类型的iOS证书。

继续阅读 »

iOS证书有多种类型,在开发iOS APP中一定要清楚了解各种iOS证书的作用。

下面介绍iOS常用的几种证书的作用和申请方法。

1、iOS开发证书

iOS开发证书是用于测试APP,在开发过程中安装到苹果手机真机测试APP的运行情况。

2、iOS发布证书

当APP开发测试好后上线就需要用到iOS发布证书,用iOS发布证书打包的ipa才能上传到App Store审核。

3、iOS推送证书

iOS推送证书是用于推送通知的,平时我们在手机的系统栏下拉看到的那些消息就是推送通知,如果要做这个功能就需要配置推送证书。

常用的就是以上这三种iOS证书,当你需要什么功能的时候就知道用哪个类型的iOS证书。

收起阅读 »

新增用户翻倍!免费资源就在换量联盟!

换量

【更新】:该功能已暂停新增开通。

App推广成本很高,一个下载(称为CPD)成本约4元,一个激活(称为CPA)成本约10元。
一方面想获客拉新,一方面又投不起高昂的推广费用,怎么办?

DCloud的生态体量其实已经很大了,每月月活手机用户数千万。
为进一步拉活生态,帮助众多中小开发者获客拉新,DCloud推出了换量联盟。

如下图,开发者加入换量联盟,将自己的开屏曝光位置让出,和其它开发者交叉换量、彼此推广。

在上图中,

  • 轻搜、传奇世界都加入了换量联盟
  • 轻搜启动时,开屏会显示传奇世界的推广图,用户点击图片,会开始下载安装传奇世界
  • 传奇世界启动时,开屏会显示轻搜的推广图,用户点击图片,会开始下载安装轻搜

通过这种方式,轻搜、传奇世界完成了互相在自己的用户中进行交叉推广。

实际上,DCloud开发者众多,加入换量联盟后,你的应用会在众多其它App开屏中显示,不会仅在特定一个App中显示。

加入换量联盟方式

方式1:登陆开发者中心,在左边的导航选择换量联盟,根据界面提示设置。
云端设置后直接生效无需打包。
如换量未生效,可能是你的app引擎过老,请重新打包。

方式2:HBuilderX最新版云打包时,会提示是否加入换量联盟,如下图:

FAQ

1、如何查看每天的换量数据?
开发者登录dev.dcloud.net.cn,选择加入换量联盟的应用,可以查看该应用前一天的换量数据。
系统会尽量保证流量公平,在你的App上推广一次别人的App,也会尽量在别人的App上推广一次你的App;鉴于并发数据过大,若某一天流量差距过大,系统也会在接下来几天中,逐步调整,尽量保证历史累计流量公平。

2、我的App没有加入换量联盟,为什么开屏时显示了广告?

a)、你的App之前已加入了广告联盟,并开通了开屏广告
b)、你的appid使用了别人的appid,常见于复制项目时没有更改appid,别人的app加入了换量联盟,导致你的app也跟着加入了换量联盟。尤其是很多开发者使用的appid是HelloH5或HelloMUI,肯定会被开广告。

想获取更多流量、或研究流量经营,或对换量平台有疑问需要咨询,欢迎联系bd@dcloud.io,你会得到专业的帮助。

继续阅读 »

【更新】:该功能已暂停新增开通。

App推广成本很高,一个下载(称为CPD)成本约4元,一个激活(称为CPA)成本约10元。
一方面想获客拉新,一方面又投不起高昂的推广费用,怎么办?

DCloud的生态体量其实已经很大了,每月月活手机用户数千万。
为进一步拉活生态,帮助众多中小开发者获客拉新,DCloud推出了换量联盟。

如下图,开发者加入换量联盟,将自己的开屏曝光位置让出,和其它开发者交叉换量、彼此推广。

在上图中,

  • 轻搜、传奇世界都加入了换量联盟
  • 轻搜启动时,开屏会显示传奇世界的推广图,用户点击图片,会开始下载安装传奇世界
  • 传奇世界启动时,开屏会显示轻搜的推广图,用户点击图片,会开始下载安装轻搜

通过这种方式,轻搜、传奇世界完成了互相在自己的用户中进行交叉推广。

实际上,DCloud开发者众多,加入换量联盟后,你的应用会在众多其它App开屏中显示,不会仅在特定一个App中显示。

加入换量联盟方式

方式1:登陆开发者中心,在左边的导航选择换量联盟,根据界面提示设置。
云端设置后直接生效无需打包。
如换量未生效,可能是你的app引擎过老,请重新打包。

方式2:HBuilderX最新版云打包时,会提示是否加入换量联盟,如下图:

FAQ

1、如何查看每天的换量数据?
开发者登录dev.dcloud.net.cn,选择加入换量联盟的应用,可以查看该应用前一天的换量数据。
系统会尽量保证流量公平,在你的App上推广一次别人的App,也会尽量在别人的App上推广一次你的App;鉴于并发数据过大,若某一天流量差距过大,系统也会在接下来几天中,逐步调整,尽量保证历史累计流量公平。

2、我的App没有加入换量联盟,为什么开屏时显示了广告?

a)、你的App之前已加入了广告联盟,并开通了开屏广告
b)、你的appid使用了别人的appid,常见于复制项目时没有更改appid,别人的app加入了换量联盟,导致你的app也跟着加入了换量联盟。尤其是很多开发者使用的appid是HelloH5或HelloMUI,肯定会被开广告。

想获取更多流量、或研究流量经营,或对换量平台有疑问需要咨询,欢迎联系bd@dcloud.io,你会得到专业的帮助。

收起阅读 »

utc new Date( )

基本概念
我们先来介绍一些可能当年在地理课上学习过的基本概念。

说起来,时间真是一个神奇的东西。以前人们通过观察太阳的位置来决定时间(比如:使用日晷),这就使得不同经纬度的地区时间是不一样的。后来人们进一步规定以子午线为中心,向东西两侧延伸,每 15 度划分一个时区,刚好是 24 个时区。然后因为一天有 24 小时,地球自转一圈是 360 度,360 度 / 24 小时 = 15 度/小时,所以每差一个时区,时间就差一个小时。

最开始的标准时间(子午线中心处的时间)是英国伦敦的皇家格林威治天文台的标准时间(因为它刚好在本初子午线经过的地方),这就是我们常说的 GMT(Greenwich Mean Time)。然后其他各个时区根据标准时间确定自己的时间,往东的时区时间晚(表示为 GMT+hh:mm)、往西的时区时间早(表示为 GMT-hh:mm)。比如,中国标准时间是东八区,我们的时间就总是比 GMT 时间晚 8 小时,他们在凌晨 1 点,我们已经是早晨 9 点了。

但是 GMT 其实是根据地球自转、公转计算的(太阳每天经过英国伦敦皇家格林威治天文台的时间为中午 12 点),不是非常准确,于是后面提出了根据原子钟计算的标准时间 UTC(Coordinated Universal Time)。

一般情况下,GMT 和 UTC 可以互换,但是实际上,GMT 是一个时区,而 UTC 是一个时间标准。

可以在这里看到所有的时区:http://www.timeanddate.com/time/map/

所以,当我们“展示”某个时间时,明确时区就变得非常重要了。不然你只说现在是 2016-01-11 19:30:00,然后不告诉我时区,我其实是没法准确知道时间的(当然,我可以认为这个时间是我所在时区的当地时间)。如果你说现在是 2016-01-11 19:30:00 GMT+0800,那我就知道这个时间是东八区的时间了。如果我在东八区,那时间就是 19:30,如果我在 GMT 时区,那时间就是 11:30(减掉 8 小时)。

//全球时区倒计时:需求:全球看到的倒计时都相同  
var date = new Date();  
// 当前时间  
var y = date.getUTCFullYear();  
var m = date.getUTCMonth();  
var d = date.getUTCDate();  
var h = date.getUTCHours();  
var m = date.getUTCMinutes();  
var s = date.getUTCSeconds();  
var UTCDate = new Date(y,m,d,h,m,s);  
//当前时间 + 0800 变为当前北京时区时间 或者 直接把活动时间转换为UTC时间更好  
// UTC的活动时间 - UTC的当前时间 = 倒计时时间  
//在计算倒计时的时候需要知道活动给定时间的时区(活动地区的时间),然后根据时区换算为UTC时间  
/**  
 * 1.根据时区将活动时间换算为UTC时间(需要知道各个时区的时间差)  
 * 2.UTC的活动时间 - UTC的当前时间 = 倒计时时间  
 * 3.所以最好的方法就是服务器给值,服务器的结束时间 - 服务器的当前时间,全球看到的时间就相同了  
 */  

 function countDown(eleId) {  

 }  
 //根据不同时区返回UTC时间 当减少时区的时候还牵涉到年月日时分秒的换算 所以最好的是换算成毫秒,减去不同时区的差值,然后再转换回当前时间 转换成正确的时间  
switch (key) {  
    case value:  

        break;  

    default:  
        break;  
}  
//假设默认结束时间(endTime)已经换算为O时区的事件(UTC)  
if (element) {  
  var endTimer = element.attr('date-timer');  
  var endTime = new Date(parseInt(endTimer.substr(0, 4), 10),  
    parseInt(endTimer.substr(4, 2), 10),  
    parseInt(endTimer.substr(6, 2), 10),  
    parseInt(endTimer.substr(8, 2), 10),  
    parseInt(endTimer.substr(10, 2), 10),  
    parseInt(endTimer.substr(12, 2), 10)  
  )  
  var endTimMonth = endTime.getMonth() - 1;//延伸:在进行月份切换的时候,new Date的时间为5月31时,转化出来的日期为7月1日,减掉一个月份之后为6月1号,无法获得正确的5月31日,原因为6月没有31号,所以加了一个月,到了7月份,所以就产生了错误.所以一般不要在new Date()之后再转化月份,而要在new Date()之前先把月份减1.  
  var endTime = new Date(parseInt(endTimer.substr(0, 4), 10),  
    parseInt(endTimer.substr(4, 2) - 1, 10), //最好改成这样,以防出错  
    parseInt(endTimer.substr(6, 2), 10),  
    parseInt(endTimer.substr(8, 2), 10),  
    parseInt(endTimer.substr(10, 2), 10),  
    parseInt(endTimer.substr(12, 2), 10)  
  )  
//也可以先把日期置为1,再调整月份,年份最后获得,以防止月份进位。  
//解决办法  
var myDate=new Date()  
myDate.setFullYear(2008,7,9)  
//注意:表示月份的参数介于 0 到 11 之间。也就是说,如果希望把月设置为 8 月,则参数应该是 7。  
  //UTC时间  
  var y = date.getUTCFullYear();  
var m = date.getUTCMonth();  
var d = date.getUTCDate();  
var h = date.getUTCHours();  
var m = date.getUTCMinutes();  
var s = date.getUTCSeconds();  

  endTime.setMonth(endTimMonth);  
  var nowTime = new Date();  
  var ts = endTime - new Date(y,m,d,h,m,s);  
  if (ts > 0) {  
    var dd = parseInt(ts / 1000 / 60 / 60 / 24, 10);  
    var hh = parseInt(ts / 1000 / 60 / 60 % 24, 10);  
    var mm = parseInt(ts / 1000 / 60 % 60, 10);  
    var ss = parseInt(ts / 1000 % 60, 10);  
    dd = dd < 10 ? ('0' + dd) : dd;  
    hh = hh < 10 ? ('0' + hh) : hh;  
    mm = mm < 10 ? ('0' + mm) : mm;  
    ss = ss < 10 ? ('0' + ss) : ss;  
    $timer_d.text(dd);  
    $timer_h.text(hh);  
    $timer_m.text(mm);  
    $timer_s.text(ss);  
    setTimeout(function () {  
      landingpage.countdown(eleId);  
    }, 1000);  
  } else {  
    $timer_d.text('00');  
    $timer_h.text('00');  
    $timer_m.text('00');  
    $timer_s.text('00');  
  }  
}  

http://www.w3school.com.cn/js/jsref_getTimezoneOffset.asp
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date

http://xtutu.me/the-date-object-in-js/

例子:创建一个日期对象的几种方法
下例展示了用来创建一个日期对象的多种方法。

var today = new Date();  
var today = new Date(1453094034000);// by timestamp(accurate to the millimeter)  
var birthday = new Date("December 17, 1995 03:24:00");  
var birthday = new Date("1995-12-17T03:24:00");  
var birthday = new Date(1995,11,17);  
var birthday = new Date(1995,11,17,3,24,0);

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date
Note: 当Date作为构造函数调用并传入多个参数时,如果数值大于合理范围时(如月份为13或者分钟数为70),相邻的数值会被调整。比如 new Date(2013, 13, 1)等于new Date(2014, 1, 1),它们都表示日期2014-02-01(注意月份是从0开始的)。其他数值也是类似,new Date(2013, 2, 1, 0, 70)等于new Date(2013, 2, 1, 1, 10),都表示时间2013-03-01T01:10:00。所以当你输入的日期为Date(2013, 5, 31)时,相当于2013-06-31,但6月没有31日所以变为2013-07-01,所以,为了避免出错,还是在换算之前提前把月份减1吧
延伸:
value
代表自1970年1月1日00:00:00 (世界标准时间) 起经过的毫秒数。
dateString
表示日期的字符串值。该字符串应该能被 Date.parse() 方法识别(符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)。
year
代表年份的整数值。为了避免2000年问题最好指定4位数的年份; 使用 1998, 而不要用 98.
month
代表月份的整数值从0(1月)到11(12月)。
day
代表一个月中的第几天的整数值,从1开始。
hour
代表一天中的小时数的整数值 (24小时制)。
minute
分钟数。
second
秒数。
millisecond
表示时间的毫秒部分的整数值。

i18n:国际化
浏览器获取当前用户所在的时区等信息只和系统的日期和时间设置里的时区及时间有关。区域和语言设置影响的是浏览器默认时间函数(Date.prototype.toLocaleString等)显示的格式,不会对时区等有影响。Date有个Date.prototype.toLocaleString()方法可以将时间字符串返回用户本地字符串格式,这个方法还有两个子方法Date.prototype.toLocaleDateString和Date.prototype.toLocaleTimeString,这两个方法返回值分别表示日期和时间,加一起就是Date.prototype.toLocaleString的结果。这个方法的默认参数会对时间字符串做一次转换,将其转换成用户当前所在时区的时间,并按照对应的系统设置时间格式返回字符串结果。然而不同浏览器对用户本地所使用的语言格式的判断依据是不同的。
IE:获取系统当前的区域和语言-格式中设置的格式,依照其对应的格式来显示当前时间结果;IE浏览器实时查询该系统设置(即你在浏览器窗口打开后去更改系统设置也会引起返回格式变化)。假设系统语言为 ja-JP,系统unicode语言为zh-CN日期格式为nl-NL,浏览器语言设置(accept-language)为de,浏览器界面语言为en-US(其他条件不变,浏览器界面语言改为zh-CN的时候结果也是一样),

window.navigator.language  
//"nl-NL"  
window.navigator.systemLanguage  
//"zh-CN"(设置中的非unicode程序所使用语言选项)  
window.navigator.userLanguage  
//"nl-NL"  
window.navigator.browserLanguage  
//"ja-JP"(系统菜单界面语言)  
window.navigator.languages  
//undefined
FF:获取方式和结果与IE浏览器相同,区别在于FF只会在浏览器进程第一次启动的时候获取一次系统设置,中间不管怎么系统设置怎么变化,FF都无法获取到当前系统设置。除非重启FF浏览器。当浏览器界面语言为zh-CN,accept-language首位为en-US的时候:
window.navigator.language  
//'en-US'  
window.navigator.languages  
//["en-US", "zh-CN", "de", "zh", "en"]  
//当界面语言改为"en-US",`accept-language`首位为`zh-CN`的时候  
window.navigator.language  
//'zh-CN'(`accept-language`首选值)  
window.navigator.languages  
//["zh-CN", "de", "zh", "en-US", "en"]

Chrome:获取方式和以上两个都不同。chrome无视系统的区域和语言-格式格式,只依照自己浏览器的界面设置的菜单语言来处理。(比如英文界面则按系统’en-US’格式返回字符串,中文界面则按系统’zh-CN’格式返回结果)。当浏览器界面语言为zh-CN,accept-language首位为en-US的时候:

window.navigator.language  
//'zh-CN'  
window.navigator.languages  
//["en-US", "en", "zh-CN", "zh", "ja", "zh-TW", "de-LI", "de", "pl"]  
//当界面语言改为"en-US"时  
window.navigator.language  
//'en-US'(浏览器界面语言)

相关链接:https://segmentfault.com/q/1010000005606125
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date
http://chitanda.me/2015/08/21/the-trivia-of-js-date-function/
重要
https://segmentfault.com/a/1190000004292140
https://segmentfault.com/a/1190000007581722

继续阅读 »

基本概念
我们先来介绍一些可能当年在地理课上学习过的基本概念。

说起来,时间真是一个神奇的东西。以前人们通过观察太阳的位置来决定时间(比如:使用日晷),这就使得不同经纬度的地区时间是不一样的。后来人们进一步规定以子午线为中心,向东西两侧延伸,每 15 度划分一个时区,刚好是 24 个时区。然后因为一天有 24 小时,地球自转一圈是 360 度,360 度 / 24 小时 = 15 度/小时,所以每差一个时区,时间就差一个小时。

最开始的标准时间(子午线中心处的时间)是英国伦敦的皇家格林威治天文台的标准时间(因为它刚好在本初子午线经过的地方),这就是我们常说的 GMT(Greenwich Mean Time)。然后其他各个时区根据标准时间确定自己的时间,往东的时区时间晚(表示为 GMT+hh:mm)、往西的时区时间早(表示为 GMT-hh:mm)。比如,中国标准时间是东八区,我们的时间就总是比 GMT 时间晚 8 小时,他们在凌晨 1 点,我们已经是早晨 9 点了。

但是 GMT 其实是根据地球自转、公转计算的(太阳每天经过英国伦敦皇家格林威治天文台的时间为中午 12 点),不是非常准确,于是后面提出了根据原子钟计算的标准时间 UTC(Coordinated Universal Time)。

一般情况下,GMT 和 UTC 可以互换,但是实际上,GMT 是一个时区,而 UTC 是一个时间标准。

可以在这里看到所有的时区:http://www.timeanddate.com/time/map/

所以,当我们“展示”某个时间时,明确时区就变得非常重要了。不然你只说现在是 2016-01-11 19:30:00,然后不告诉我时区,我其实是没法准确知道时间的(当然,我可以认为这个时间是我所在时区的当地时间)。如果你说现在是 2016-01-11 19:30:00 GMT+0800,那我就知道这个时间是东八区的时间了。如果我在东八区,那时间就是 19:30,如果我在 GMT 时区,那时间就是 11:30(减掉 8 小时)。

//全球时区倒计时:需求:全球看到的倒计时都相同  
var date = new Date();  
// 当前时间  
var y = date.getUTCFullYear();  
var m = date.getUTCMonth();  
var d = date.getUTCDate();  
var h = date.getUTCHours();  
var m = date.getUTCMinutes();  
var s = date.getUTCSeconds();  
var UTCDate = new Date(y,m,d,h,m,s);  
//当前时间 + 0800 变为当前北京时区时间 或者 直接把活动时间转换为UTC时间更好  
// UTC的活动时间 - UTC的当前时间 = 倒计时时间  
//在计算倒计时的时候需要知道活动给定时间的时区(活动地区的时间),然后根据时区换算为UTC时间  
/**  
 * 1.根据时区将活动时间换算为UTC时间(需要知道各个时区的时间差)  
 * 2.UTC的活动时间 - UTC的当前时间 = 倒计时时间  
 * 3.所以最好的方法就是服务器给值,服务器的结束时间 - 服务器的当前时间,全球看到的时间就相同了  
 */  

 function countDown(eleId) {  

 }  
 //根据不同时区返回UTC时间 当减少时区的时候还牵涉到年月日时分秒的换算 所以最好的是换算成毫秒,减去不同时区的差值,然后再转换回当前时间 转换成正确的时间  
switch (key) {  
    case value:  

        break;  

    default:  
        break;  
}  
//假设默认结束时间(endTime)已经换算为O时区的事件(UTC)  
if (element) {  
  var endTimer = element.attr('date-timer');  
  var endTime = new Date(parseInt(endTimer.substr(0, 4), 10),  
    parseInt(endTimer.substr(4, 2), 10),  
    parseInt(endTimer.substr(6, 2), 10),  
    parseInt(endTimer.substr(8, 2), 10),  
    parseInt(endTimer.substr(10, 2), 10),  
    parseInt(endTimer.substr(12, 2), 10)  
  )  
  var endTimMonth = endTime.getMonth() - 1;//延伸:在进行月份切换的时候,new Date的时间为5月31时,转化出来的日期为7月1日,减掉一个月份之后为6月1号,无法获得正确的5月31日,原因为6月没有31号,所以加了一个月,到了7月份,所以就产生了错误.所以一般不要在new Date()之后再转化月份,而要在new Date()之前先把月份减1.  
  var endTime = new Date(parseInt(endTimer.substr(0, 4), 10),  
    parseInt(endTimer.substr(4, 2) - 1, 10), //最好改成这样,以防出错  
    parseInt(endTimer.substr(6, 2), 10),  
    parseInt(endTimer.substr(8, 2), 10),  
    parseInt(endTimer.substr(10, 2), 10),  
    parseInt(endTimer.substr(12, 2), 10)  
  )  
//也可以先把日期置为1,再调整月份,年份最后获得,以防止月份进位。  
//解决办法  
var myDate=new Date()  
myDate.setFullYear(2008,7,9)  
//注意:表示月份的参数介于 0 到 11 之间。也就是说,如果希望把月设置为 8 月,则参数应该是 7。  
  //UTC时间  
  var y = date.getUTCFullYear();  
var m = date.getUTCMonth();  
var d = date.getUTCDate();  
var h = date.getUTCHours();  
var m = date.getUTCMinutes();  
var s = date.getUTCSeconds();  

  endTime.setMonth(endTimMonth);  
  var nowTime = new Date();  
  var ts = endTime - new Date(y,m,d,h,m,s);  
  if (ts > 0) {  
    var dd = parseInt(ts / 1000 / 60 / 60 / 24, 10);  
    var hh = parseInt(ts / 1000 / 60 / 60 % 24, 10);  
    var mm = parseInt(ts / 1000 / 60 % 60, 10);  
    var ss = parseInt(ts / 1000 % 60, 10);  
    dd = dd < 10 ? ('0' + dd) : dd;  
    hh = hh < 10 ? ('0' + hh) : hh;  
    mm = mm < 10 ? ('0' + mm) : mm;  
    ss = ss < 10 ? ('0' + ss) : ss;  
    $timer_d.text(dd);  
    $timer_h.text(hh);  
    $timer_m.text(mm);  
    $timer_s.text(ss);  
    setTimeout(function () {  
      landingpage.countdown(eleId);  
    }, 1000);  
  } else {  
    $timer_d.text('00');  
    $timer_h.text('00');  
    $timer_m.text('00');  
    $timer_s.text('00');  
  }  
}  

http://www.w3school.com.cn/js/jsref_getTimezoneOffset.asp
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date

http://xtutu.me/the-date-object-in-js/

例子:创建一个日期对象的几种方法
下例展示了用来创建一个日期对象的多种方法。

var today = new Date();  
var today = new Date(1453094034000);// by timestamp(accurate to the millimeter)  
var birthday = new Date("December 17, 1995 03:24:00");  
var birthday = new Date("1995-12-17T03:24:00");  
var birthday = new Date(1995,11,17);  
var birthday = new Date(1995,11,17,3,24,0);

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date
Note: 当Date作为构造函数调用并传入多个参数时,如果数值大于合理范围时(如月份为13或者分钟数为70),相邻的数值会被调整。比如 new Date(2013, 13, 1)等于new Date(2014, 1, 1),它们都表示日期2014-02-01(注意月份是从0开始的)。其他数值也是类似,new Date(2013, 2, 1, 0, 70)等于new Date(2013, 2, 1, 1, 10),都表示时间2013-03-01T01:10:00。所以当你输入的日期为Date(2013, 5, 31)时,相当于2013-06-31,但6月没有31日所以变为2013-07-01,所以,为了避免出错,还是在换算之前提前把月份减1吧
延伸:
value
代表自1970年1月1日00:00:00 (世界标准时间) 起经过的毫秒数。
dateString
表示日期的字符串值。该字符串应该能被 Date.parse() 方法识别(符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)。
year
代表年份的整数值。为了避免2000年问题最好指定4位数的年份; 使用 1998, 而不要用 98.
month
代表月份的整数值从0(1月)到11(12月)。
day
代表一个月中的第几天的整数值,从1开始。
hour
代表一天中的小时数的整数值 (24小时制)。
minute
分钟数。
second
秒数。
millisecond
表示时间的毫秒部分的整数值。

i18n:国际化
浏览器获取当前用户所在的时区等信息只和系统的日期和时间设置里的时区及时间有关。区域和语言设置影响的是浏览器默认时间函数(Date.prototype.toLocaleString等)显示的格式,不会对时区等有影响。Date有个Date.prototype.toLocaleString()方法可以将时间字符串返回用户本地字符串格式,这个方法还有两个子方法Date.prototype.toLocaleDateString和Date.prototype.toLocaleTimeString,这两个方法返回值分别表示日期和时间,加一起就是Date.prototype.toLocaleString的结果。这个方法的默认参数会对时间字符串做一次转换,将其转换成用户当前所在时区的时间,并按照对应的系统设置时间格式返回字符串结果。然而不同浏览器对用户本地所使用的语言格式的判断依据是不同的。
IE:获取系统当前的区域和语言-格式中设置的格式,依照其对应的格式来显示当前时间结果;IE浏览器实时查询该系统设置(即你在浏览器窗口打开后去更改系统设置也会引起返回格式变化)。假设系统语言为 ja-JP,系统unicode语言为zh-CN日期格式为nl-NL,浏览器语言设置(accept-language)为de,浏览器界面语言为en-US(其他条件不变,浏览器界面语言改为zh-CN的时候结果也是一样),

window.navigator.language  
//"nl-NL"  
window.navigator.systemLanguage  
//"zh-CN"(设置中的非unicode程序所使用语言选项)  
window.navigator.userLanguage  
//"nl-NL"  
window.navigator.browserLanguage  
//"ja-JP"(系统菜单界面语言)  
window.navigator.languages  
//undefined
FF:获取方式和结果与IE浏览器相同,区别在于FF只会在浏览器进程第一次启动的时候获取一次系统设置,中间不管怎么系统设置怎么变化,FF都无法获取到当前系统设置。除非重启FF浏览器。当浏览器界面语言为zh-CN,accept-language首位为en-US的时候:
window.navigator.language  
//'en-US'  
window.navigator.languages  
//["en-US", "zh-CN", "de", "zh", "en"]  
//当界面语言改为"en-US",`accept-language`首位为`zh-CN`的时候  
window.navigator.language  
//'zh-CN'(`accept-language`首选值)  
window.navigator.languages  
//["zh-CN", "de", "zh", "en-US", "en"]

Chrome:获取方式和以上两个都不同。chrome无视系统的区域和语言-格式格式,只依照自己浏览器的界面设置的菜单语言来处理。(比如英文界面则按系统’en-US’格式返回字符串,中文界面则按系统’zh-CN’格式返回结果)。当浏览器界面语言为zh-CN,accept-language首位为en-US的时候:

window.navigator.language  
//'zh-CN'  
window.navigator.languages  
//["en-US", "en", "zh-CN", "zh", "ja", "zh-TW", "de-LI", "de", "pl"]  
//当界面语言改为"en-US"时  
window.navigator.language  
//'en-US'(浏览器界面语言)

相关链接:https://segmentfault.com/q/1010000005606125
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date
http://chitanda.me/2015/08/21/the-trivia-of-js-date-function/
重要
https://segmentfault.com/a/1190000004292140
https://segmentfault.com/a/1190000007581722

收起阅读 »

点击手机物理返回按钮~返回上一页源码分享

源码地址
http://ask.dcloud.net.cn/article/13294?item_id=12414
带源码,带生成好的app,方便你测试,保证可以用。

源码地址
http://ask.dcloud.net.cn/article/13294?item_id=12414
带源码,带生成好的app,方便你测试,保证可以用。

在Mac、Linux、Ubuntu终端显示Git当前所在分支

Git

git-branch
1.进入home目录
cd ~
2.用vi编辑.bashrc文件
vi .bashrc
3.将下面的代码加入到文件的最后处

function git_branch {  
   branch="`git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //"`"  
   if [ "${branch}" != "" ];then  
       if [ "${branch}" = "(no branch)" ];then  
           branch="(`git rev-parse --short HEAD`...)"  
       fi  
       echo " ($branch)"  
   fi  
}  

export PS1='\u@\h \[\033[01;36m\]\W\[\033[01;32m\]$(git_branch)\[\033[00m\] \$ '

注:输入i进行vi编辑,完成后按Esc按钮退出编辑 :wq 进行保存退出
4.执行命令 source ./.bashrc

  1. 完成
    Mac下面启动的shell是login shell,所以加载的配置文件是 .bash_profile,不会加载 .bashrc,如果你是Mac用户的话,需要再
    执行下面的命令,这样每次开就会才会自动生效:
    echo "[ -r ~/.bashrc ] && source ~/.bashrc" >> .bash_profile

    延伸阅读:https://www.jianshu.com/p/82783f76a868

继续阅读 »

git-branch
1.进入home目录
cd ~
2.用vi编辑.bashrc文件
vi .bashrc
3.将下面的代码加入到文件的最后处

function git_branch {  
   branch="`git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //"`"  
   if [ "${branch}" != "" ];then  
       if [ "${branch}" = "(no branch)" ];then  
           branch="(`git rev-parse --short HEAD`...)"  
       fi  
       echo " ($branch)"  
   fi  
}  

export PS1='\u@\h \[\033[01;36m\]\W\[\033[01;32m\]$(git_branch)\[\033[00m\] \$ '

注:输入i进行vi编辑,完成后按Esc按钮退出编辑 :wq 进行保存退出
4.执行命令 source ./.bashrc

  1. 完成
    Mac下面启动的shell是login shell,所以加载的配置文件是 .bash_profile,不会加载 .bashrc,如果你是Mac用户的话,需要再
    执行下面的命令,这样每次开就会才会自动生效:
    echo "[ -r ~/.bashrc ] && source ~/.bashrc" >> .bash_profile

    延伸阅读:https://www.jianshu.com/p/82783f76a868

收起阅读 »

调用二维码控件出现页面变形的问题

plusready之后不要直接创建控件,设置200ms的延时再进行创建,代码如下图所示
// 创建扫描控件
function startRecognize() {
if(!scan){
scan = new plus.barcode.Barcode('bcid');
scan.onmarked = onmarked;
}
}

    mui.plusReady(function(){  
        setTimeout(function(){  
        startRecognize();  
        scan.start();  
        },200);  

    });  
继续阅读 »

plusready之后不要直接创建控件,设置200ms的延时再进行创建,代码如下图所示
// 创建扫描控件
function startRecognize() {
if(!scan){
scan = new plus.barcode.Barcode('bcid');
scan.onmarked = onmarked;
}
}

    mui.plusReady(function(){  
        setTimeout(function(){  
        startRecognize();  
        scan.start();  
        },200);  

    });  
收起阅读 »

自己做的安卓APP分享代码啦。嵌入任意网址-本地HTML(无限嵌入)都完美支持-点击手机返回按钮完美返回上一页

自定义模板 源码分享

自己做的安卓APP软件,分享代码啦。点击手机返回按钮完美返回上一页
源码下载地址(都可以用的。自己测试一下哈)
https://21sqw.lanzous.com/i62kuwf
https://21sqw.lanzous.com/i62kosf

软件下载地址
https://21sqw.lanzous.com/i62kore

这是一款支持你嵌入任意网页,任意网站,任意本地HTML,都可以完美
点击手机返回按钮完美返回上一页

不信的大家可以下载软件来测试来。。点击手机返回按钮自动返回上一页。

![如果有哪里不懂得。可以私聊我。

继续阅读 »

自己做的安卓APP软件,分享代码啦。点击手机返回按钮完美返回上一页
源码下载地址(都可以用的。自己测试一下哈)
https://21sqw.lanzous.com/i62kuwf
https://21sqw.lanzous.com/i62kosf

软件下载地址
https://21sqw.lanzous.com/i62kore

这是一款支持你嵌入任意网页,任意网站,任意本地HTML,都可以完美
点击手机返回按钮完美返回上一页

不信的大家可以下载软件来测试来。。点击手机返回按钮自动返回上一页。

![如果有哪里不懂得。可以私聊我。

收起阅读 »

【文档】wap2app选项卡样式定制

选项卡 wap2app

以下修改或配置,均在 client_index.html 中进行。

选项卡文字颜色

/*选项卡文字默认颜色*/  
.tab-item {  
  color: #000000;  
}  

/*选项卡文字高亮时颜色*/  
.tab-item.active {  
  color: #FFFF00;  
}

选项卡背景

.tab-inner {  
  background-color: #0000FF;  
  box-shadow: 0 0 1px #FF0000;  
  -webkit-box-shadow: 0 0 1px #FF0000;  
}

底部选项卡是没有边框(border)的,而是使用了阴影(box-shadow)。可以根据需求,修改样式。

修改阴影的颜色

.tab-inner {  
  box-shadow: 0 0 1px #FF0000;  
  -webkit-box-shadow: 0 0 1px #FF0000;  
}

不要阴影,使用边框。

.tab-inner {  
  box-shadow: none;  
  -webkit-box-shadow: none;  
  border-top: 1px solid #0000ff;  
}

关于图标

图标是需要在初始化选项卡的时候就配置的,详细参考 http://ask.dcloud.net.cn/article/12878 中的说明。

new TabBar({  
  list: [{  
      url: "http://hello.wap2app.dcloud.io",  
      text: "首页", //本地路径,也可以是网络路径  
      iconPath: 'http://hello.wap2app.dcloud.io/img/home-outline.png',  
      selectedIconPath: 'http://hello.wap2app.dcloud.io/img/home-outline-highlight.png'  
    },  
    {  
      url: "http://hello.wap2app.dcloud.io/about.html",  
      text: "关于",  
      iconPath: 'http://hello.wap2app.dcloud.io/img/gear-outline.png',  
      selectedIconPath: 'http://hello.wap2app.dcloud.io/img/gear-outline-highlight.png'  
    }  
  ]  
});
继续阅读 »

以下修改或配置,均在 client_index.html 中进行。

选项卡文字颜色

/*选项卡文字默认颜色*/  
.tab-item {  
  color: #000000;  
}  

/*选项卡文字高亮时颜色*/  
.tab-item.active {  
  color: #FFFF00;  
}

选项卡背景

.tab-inner {  
  background-color: #0000FF;  
  box-shadow: 0 0 1px #FF0000;  
  -webkit-box-shadow: 0 0 1px #FF0000;  
}

底部选项卡是没有边框(border)的,而是使用了阴影(box-shadow)。可以根据需求,修改样式。

修改阴影的颜色

.tab-inner {  
  box-shadow: 0 0 1px #FF0000;  
  -webkit-box-shadow: 0 0 1px #FF0000;  
}

不要阴影,使用边框。

.tab-inner {  
  box-shadow: none;  
  -webkit-box-shadow: none;  
  border-top: 1px solid #0000ff;  
}

关于图标

图标是需要在初始化选项卡的时候就配置的,详细参考 http://ask.dcloud.net.cn/article/12878 中的说明。

new TabBar({  
  list: [{  
      url: "http://hello.wap2app.dcloud.io",  
      text: "首页", //本地路径,也可以是网络路径  
      iconPath: 'http://hello.wap2app.dcloud.io/img/home-outline.png',  
      selectedIconPath: 'http://hello.wap2app.dcloud.io/img/home-outline-highlight.png'  
    },  
    {  
      url: "http://hello.wap2app.dcloud.io/about.html",  
      text: "关于",  
      iconPath: 'http://hello.wap2app.dcloud.io/img/gear-outline.png',  
      selectedIconPath: 'http://hello.wap2app.dcloud.io/img/gear-outline-highlight.png'  
    }  
  ]  
});
收起阅读 »

流应用提交指南及如何通过流应用让激活用户翻倍

正式平台 流应用

流应用是一种即点即用的应用。2015年发布,是小程序/快应用等动态App行业的先行者。
流应用默认会在手机桌面创建图标,遇到权限问题会引导用户赋权。
原生App需要经历下载、安装、激活数个环节,100个下载里最终只有40个用户成功启动这个App。
也就是只有40%的激活率。
而流应用即点即用,5秒内完成直接完成下载、激活。
尤其在应用内广告场景中,过去下载安装apk的折损是甚至大于60%,此时尤其需要即点即用的流应用来提升广告效果。

所有HTML5+开发的app,包括wap2app的app,都可以自动转为流应用。
当然需要开发者自己提交和测试。

本文讲解如何在HBuilder中将5+ App、wap2app发布成流应用。

提交到测试平台

在HBuilder(注意HBuilderX暂不支持)中选择需要发布的项目工程,点击顶部菜单“发行 -> 发行为流应用”,会弹出发行界面,如下图:

点击“提交测试”,将应用资源提交到测试平台上,提交成功后,会显示测试二维码,如下图所示:

测试流应用各项业务功能

dcloud.io 下载并安装流应用App,使用流应用App扫描如上的测试二维码,验证应用的各项功能在流应用环境下是否正常。

若有平台差异,建议通过环境判断,做适当修改。

发布到正式平台

在测试平台验证流应用功能正常后,点击“发布为正式”按钮,向正式平台提交。

鉴于监管要求,流应用首次发布正式时,需在线提交一些应用信息,如下图:

信息提交完成后,还需经过平台方的人工审核,审核通过后,会自动发布到正式;开发者再次打开发行流应用菜单,会显示正式平台的二维码(快码),如下图:

若审核失败,会通过邮件通知审核失败的原因(比如用户体验不佳、涉及敏感信息等)。

注意:流应用发布正式平台前,需完成开发者的实名认证,相关流程参考DCloud开发者实名认证流程

继续阅读 »

流应用是一种即点即用的应用。2015年发布,是小程序/快应用等动态App行业的先行者。
流应用默认会在手机桌面创建图标,遇到权限问题会引导用户赋权。
原生App需要经历下载、安装、激活数个环节,100个下载里最终只有40个用户成功启动这个App。
也就是只有40%的激活率。
而流应用即点即用,5秒内完成直接完成下载、激活。
尤其在应用内广告场景中,过去下载安装apk的折损是甚至大于60%,此时尤其需要即点即用的流应用来提升广告效果。

所有HTML5+开发的app,包括wap2app的app,都可以自动转为流应用。
当然需要开发者自己提交和测试。

本文讲解如何在HBuilder中将5+ App、wap2app发布成流应用。

提交到测试平台

在HBuilder(注意HBuilderX暂不支持)中选择需要发布的项目工程,点击顶部菜单“发行 -> 发行为流应用”,会弹出发行界面,如下图:

点击“提交测试”,将应用资源提交到测试平台上,提交成功后,会显示测试二维码,如下图所示:

测试流应用各项业务功能

dcloud.io 下载并安装流应用App,使用流应用App扫描如上的测试二维码,验证应用的各项功能在流应用环境下是否正常。

若有平台差异,建议通过环境判断,做适当修改。

发布到正式平台

在测试平台验证流应用功能正常后,点击“发布为正式”按钮,向正式平台提交。

鉴于监管要求,流应用首次发布正式时,需在线提交一些应用信息,如下图:

信息提交完成后,还需经过平台方的人工审核,审核通过后,会自动发布到正式;开发者再次打开发行流应用菜单,会显示正式平台的二维码(快码),如下图:

若审核失败,会通过邮件通知审核失败的原因(比如用户体验不佳、涉及敏感信息等)。

注意:流应用发布正式平台前,需完成开发者的实名认证,相关流程参考DCloud开发者实名认证流程

收起阅读 »

打开系统应用,如日历,要打开对应的权限

日历

如下图,如果你想打开手机的内置应用,有些是需要添加权限的,之前调式都可以打开日历,打包后,都不可以打开日历,查看才发现需要添加权限,,

如下图,如果你想打开手机的内置应用,有些是需要添加权限的,之前调式都可以打开日历,打包后,都不可以打开日历,查看才发现需要添加权限,,

plus.geolocation.getCurrentPosition || plus.maps.Map.calculateDistance

5+文档中距离计算是按照百度坐标来进行计算的;而定位获取到的坐标是国测局坐标(火星坐标,比如高德地图在用),需要转换为百度
坐标;具体转换方法由于简书已发布文章就不在重复编辑了,可参考https://www.jianshu.com/p/b1e9edf61cd8

继续阅读 »

5+文档中距离计算是按照百度坐标来进行计算的;而定位获取到的坐标是国测局坐标(火星坐标,比如高德地图在用),需要转换为百度
坐标;具体转换方法由于简书已发布文章就不在重复编辑了,可参考https://www.jianshu.com/p/b1e9edf61cd8

收起阅读 »