2013-11-25 54 views
2

我有這個代碼來計算查找本地化的UTC時間。根據UTC時間,還有另一個函數可以爲我計算下一個事件日期和時間。如果時間在星期天@ 12和星期三@ 8之間,它會給我星期三的活動日期,否則它會在星期天給我下一個活動日期。然後我將這個計算日期分開,並作爲參數提供給倒數計時器。返回倒計時定時器的下一個本地日期

我想知道是否有一個更優化的方式來做到這一點,特別是有條件的聲明,我把時間分成參數。

$(function() { 
// Calculate the time locally 
function calcLocalizedTime() { 
    var d = new Date(); // Date for current location 
    var utc = d.getTime() + (d.getTimezoneOffset() * 60000); // convert to msec add local time zone offset get UTC time in msec 
    var nd = new Date(utc + (3600000 * -5)); 
    return nd; // return localized datetime 
} 

// Calculate the next Webcast DateTime 
function calcNextWebCast(date) { 
    var localizedTime = new Date(date||new Date()); // localized datetime 
    var nextDate = new Date(date||new Date()); // Next webcast datetime object 
    var today = localizedTime.getDay() + '' + localizedTime.getHours(); // format localized datetime for comparison 

    if (today >= 012 && today <=320) { // is today between Sun @ 12 or Wednesday @ 8 
     nextDate.setDate(nextDate.getDate() + (3 - 1 - nextDate.getDay() + 7) % 7 + 1); 
     nextDate.setHours(20,0,0,0); 
    } else { 
     nextDate.setDate(nextDate.getDate() + (3 - 4 - nextDate.getDay() + 7) % 7 + 1); 
     nextDate.setHours(12,0,0,0); 
    } 

    return nextDate; 
} 

var localizedTime = calcLocalizedTime(); 
var nextWebCast = calcNextWebCast(localizedTime); 
var m = nextWebCast.getMonth() + 1; 
var d = nextWebCast.getDate(); 
var y = nextWebCast.getFullYear(); 
var hh = nextWebCast.getHours(); 
var mm = nextWebCast.getMinutes(); 

$('#defaultCountdown').countdown({until: $.countdown.UTCDate(-5, y, m-1, d, hh, mm)}); 

}); 

回答

1

我不知道是否有一個更優化的方式來做到這一點,特別是與條件語句,並在那裏我裂開的時間爲參數。

使用調度表代替條件語句和正則表達式替換範圍:

function foo(nextDate) 
{ 
calcNextWebCast.nextDate.setDate(calcNextWebCast.nextDate.getDate() + (3 - 1 - nextDate.getDay() + 7) % 7 + 1); 
calcNextWebCast.nextDate.setHours(20,0,0,0); 
} 

function bar(nextDate) 
{ 
calcNextWebCast.nextDate.setDate(calcNextWebCast.nextDate.getDate() + (3 - 4 - nextDate.getDay() + 7) % 7 + 1); 
calcNextWebCast.nextDate.setHours(12,0,0,0); 
} 


function calcNextWebCast(date) { 
calcNextWebCast.nextDate = new Date(date||new Date()); // Next webcast datetime object 

var localizedTime = new Date(date||new Date()); // localized datetime 
var today = localizedTime.getDay() + '' + localizedTime.getHours(); // format localized datetime for comparison 

var range = "012|[0][1][3-9]|[0][2-9][0-9]|[1-2][0-9][0-9]|[3][0-1][0-9]|320"; 

var datemap = { "true":foo, "false":bar } 

var jump = RegExp(range).test(today); 

var go = datemap[jump]; 

go(); 

return nextDate; 
} 

參考