
//两个日期的差值(d1 - d2)
function DateDiff(d1,d2){
var day = 24 60 60 1000;
try{
var dateArr = d1split("-");
var checkDate = new Date();
checkDatesetFullYear(dateArr[0], dateArr[1]-1, dateArr[2]);
var checkTime = checkDategetTime();
var dateArr2 = d2split("-");
var checkDate2 = new Date();
checkDate2setFullYear(dateArr2[0], dateArr2[1]-1, dateArr2[2]);
var checkTime2 = checkDate2getTime();
var cha = (checkTime - checkTime2)/day;
return cha;
}catch(e){
return false;
}
}
一、 让代码简洁:一些简略的表达方式也会产生很好的优化
eg:x=x+1;在不影响功能的情况下可以简写为x++;
二、 变量名方法名尽量在不影响语意的情况下简单。(可以选择首字母命名)
eg:定义数组的长度可以取名为:ArrLen而不需要取为ArrayLength。
三、 关于JS的循环,循环是一种常用的流程控制。
JS提供了三种循环:for(;;)、while()、for(in)。在这三种循环中for(in)的效率最差,因为它需要查询Hash键,因此应尽量少用for(in)循环,for(;;)、while()循环的性能基本持平。当然,推荐使用for循环,如果循环变量递增或递减,不要单独对循环变量赋值,而应该使用嵌套的++或–运算符。
四、 如果需要遍历数组,应该先缓存数组长度,将数组长度放入局部变量中,避免多次查询数组长度。
因为我们常常要根据字符串、数组的长度进行循环,而通常这个长度是不变的,比如每次查询alength,就要额外进行一个 *** 作,而预先把var len=alength,则就少了一次查询。
五、 尽量选用局部变量而不是全局变量。
局部变量的访问速度要比全局变量的访问速度更快,因为全局变量其实是window对象的成员,而局部变量是放在函数的栈里的。
六、 尽量少使用eval。
每次使用eval需要消耗大量时间,这时候使用JS所支持的闭包可以实现函数模板。
七、 减少对象查找
因为JavaScript的解释性,所以abcde,需要进行至少4次查询 *** 作,先检查a再检查a中的b,再检查b中的c,如此往下。所以如果这样的表达式重复出现,只要可能,应该尽量少出现这样的表达式,可以利用局部变量,把它放入一个临时的地方进行查询。
八、 字符串连接。
如果是追加字符串,最好使用s+=anotherStr *** 作,而不是要使用s=s+anotherStr。
如果要连接多个字符串,应该少使用+=,如s+=a;s+=b;s+=c;应该写成s+=a + b + c;
而如果是收集字符串,比如多次对同一个字符串进行+= *** 作的话,最好使用一个缓存。怎么用呢?使用JavaScript数组来收集,最后使用join方法连接起来,如下
var buf = new Array();for(var i = 0; i < 100; i++){ bufpush(itoString());}var all = bufjoin("");
九、 类型转换
1 把数字转换成字符串,应用"" + 1,虽然看起来比较丑一点,但事实上这个效率是最高的,性能上来说:("" +) > String() > toString() > new String()
尽量使用编译时就能使用的内部 *** 作要比运行时使用的用户 *** 作要快。
String()属于内部函数,所以速度很快,而toString()要查询原型中的函数,所以速度逊色一些,new String()用于返回一个精确的副本。
2 浮点数转换成整型,这个更容易出错,很多人喜欢使用parseInt(),其实parseInt()是用于将字符串转换成数字,而不是浮点数和整型之间的转换,我们应该使用Mathfloor()或者Mathround()。Math是内部对象,所以Mathfloor()其实并没有多少查询方法和调用的时间,速度是最快的。
3 对于自定义的对象,如果定义了toString()方法来进行类型转换的话,推荐显式调用toString(),因为内部的 *** 作在尝试所有可能性之后,会尝试对象的toString()方法尝试能否转化为String,所以直接调用这个方法效率会更高
十、 尽量作用JSON格式来创建对象,而不是var obj=new Object()方法。
今天在测试同事的微信平台的发送语音的时候,发现有时候语音能发过来,有时候就不行,经过检查,发现丢掉了检测音频时长(微信里面语言时长要限定在60S内),好吧,我补上,闲着也是闲着~
首先是读取语音的时长:
<span style="font-size:14px;"> /// <summary>
/// 获取上传音频的时间长度
/// </summary>
/// <param name="strFullUrl">The STR full URL</param>
/// <returns>SystemString</returns>
/// <remarks>Editor:v-liuhch CreateTime:2015/5/15 17:32:57</remarks>
public string GetLocalVoiceTotalTime(string strFullUrl)
{
ShellClass sh = new ShellClass();
Folder dir = shNameSpace(PathGetDirectoryName(strFullUrl));
FolderItem item = dirParseName(PathGetFileName(strFullUrl));
return dirGetDetailsOf(item, 27); // 获取歌曲时长。
}</span>
使用shellclass的时候要先引用COM组件Microsoft Shell Controls And Automation,并将Embed Interop Type 设为False。
由于上述函数只支持读取本地文件,所以,我们将得到的文件先放在临时文件夹中,判断完成之后立即删除。
<span style="font-size:14px;">/// <summary>
/// 检查上传音频文件的总时间长度是否小于60s
/// </summary>
/// <param name="file">The file</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
/// <remarks>Editor:v-liuhch CreateTime:2015/5/15 17:34:51</remarks>
public bool ChkVideoTotalTime(>
AudioCLip主要的方法有:play()播放依次声音;loop()循环播放音乐;stop()停止播放。做法一:InputStreamis=null;AudioStreamas=null;is=getClass()getResourceAsStream("awav");try{as=newAudioStream(is);}catch(IOExceptione){}AudioPlayerplayerstart(as);此方法将音乐文件放入流中在播放,仅限于JavaApplication,容易报错,空指针异常,或者是流异常,不推荐。做法二:Stringmusic="awav";AudioClipclip=AppletnewAudioClip(getClass()getResource(music));次方法在Applet中运行没有问题,但是Application中getclass()会返回空指针,导致失败。推荐做法:privateURLurl;privateAudioClipac;Filef1=newFile("C:/3wav");try{url=f1toURL();}catch(MalformedURLExceptione){//TODOAuto-generatedcatchblockeprintStackTrace();}ac=AppletnewAudioClip(cb1);acplay();
初步的实现想法:
在你接电话的时候,离开小程序应该会触发小程序的onHide函数,在里面记录这个时间点(这是你接电话的开始时间);
在你挂电话后,回到小程序会触发onShow函数,在里面记录这个时间点(这是你接电话的结束时间);
两个时间相差就是你要的通话时长了;
不过我没有实现过类似的功能,这只是一个想法,如果可以实现,请回复我一下,谢谢啦
以上就是关于js选择了时间和时长,怎么算结束时间全部的内容,包括:js选择了时间和时长,怎么算结束时间、如何精确计算JS程序运行时间,进而优化代码、文章怎么测试语音时长等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)