2016-10-02 67 views
-1

我正在研究「租賃汽車」網絡應用...因此,用戶可以選擇日期「從」和「直到」他想租賃汽車..這些值被存儲進入單變量(見下文):將單個值存儲到日期格式中的JavaScript

//BACK 
var backDay = parseInt(jQuery('#back_day').val(),10); 
var backMonth = parseInt(jQuery('#back_month').val(),10); 
var backYear = parseInt(jQuery('#back_year').val(),10); 
var backHours = parseInt(jQuery('#back_hour').val(),10); 
var backMinutes = parseInt(jQuery('#back_minute').val(),10); 
//FROM 
var fromDay = parseInt(jQuery('#from_day').val(),10); 
var fromMonth = parseInt(jQuery('#from_month').val(),10); 
var fromYear = parseInt(jQuery('#from_year').val(),10); 
var fromHours = parseInt(jQuery('#from_hour').val(),10); 
var fromMinutes = parseInt(jQuery('#from_minute').val(),10); 
var freeKm = parseInt(jQuery('#freeKm').val(),10); 
var group = jQuery(groupKON).val(); 

如此,是因爲老闆注意到,在今年需求某些時期較高,在此期間(賽季),他希望增加對汽車租賃的價格。

因此,在以下日期之間價格應該上漲。

saison1 1.3.17-21.5.17 15%價格上漲 saison2 19.06.17-02.07.17 10%價格上漲 saison3 12.09.17-31.10.17 10%價格上漲

我的問題是如何將日期存儲到變量中,以便我可以編寫條件語句?

例如:

if(date == saison1) { 
function increaseThePrice() { 
newPrice = price*1.5; 
return newPrice; 
} 

我希望我的問題是非常明顯的!

在此先感謝!如果你通過JavaScript設置折扣通過客戶端腳本

丹尼斯

+0

你不用服務器嗎?當你可以輕鬆地將日期存儲在服務器上的數據庫中時,爲什麼要將日期存儲在變量中,在需要時從服務器獲取季節日期,並將其與當前日期進行比較。 –

回答

0

我相信@Softberry是對的,你不應該把它放在客戶端。

我整合了@RobG建議的更改。 (

「......在這個解決方案構建的所有日期爲GMT + 0 ......」只有在主機上運行的腳本的時間段,或者如果你是使用新的Date(Date.UTC(2017年,9-1,17))沒有必要提供零值,缺省參數默認爲0(除了日期,它默認爲1)

現在,如果你使用它在客戶端或服務器上,問題依然存在。

這裏是一個JavaScript的解決方案

/** main logic */ 
function getCostForInterval(basePrice,from,back){ 
    var total=0; 
    var seasonAdjustments=getSeasonPriceMultipliers(); 
    /* iterate through each day of the interval (from-back)*/ 
    for(
    var d=from;/* start */ 
    d.getTime()<=back.getTime();/* end condition */ 
    d.setDate(d.getDate()+1)/* increment by one day */ 
){ 
    total+=basePrice*getAdjustmentForDate(d,seasonAdjustments); 
    } 
    return total; 
} 


/** getAdjustmentForDate returns either 1 or 
    * or the corresponding price multiplier 
    * when the date falls into a season 
    */ 
function getAdjustmentForDate(date,seasons){ 
    var multiplier=1; 
    for(var ix=0;ix<seasons.length;ix++){ 
    var season=seasons[i]; 
    /** if date falls inside current season 
    **/ 
    if(season.begin.getTime()<date.getTime() 
     && date.getTime()<season.begin.getTime()){ 
     return season.multiplier; 
    } 
    } 
    /** if date doesn't fall inside any 
    * of the season intervals */ 
    return multiplier; 
} 

/*** getSeasonPriceMultipliers 
    ** returns an array of intervals where 
    ** price modifications may apply 
    ** 
    ** you can change the data retrieving mechanism 
    ** from hard coded to an http/ajax call 
***/ 
function getSeasonPriceMultipliers(){ 
    var saisons=[ 
    { 
    begin : new Date(Date.UTC(2017,3-1,1,0,0,0)), 
    end : new Date(Date.UTC(2017,5-1,21,23,59,59)), 
    multiplier : 1.15 
    }, 
    { 
    begin : new Date(Date.UTC(2017,6-1,19,0,0,0)), 
    end : new Date(Date.UTC(017,7-1,2,23,59,59)), 
    multiplier : 1.10 
    }, 
    { 
    begin : new Date(Date.UTC(2017,9-1,17,0,0,0)), 
    end : new Date(Date.UTC(2017,10-1,31,23,59,59)), 
    multiplier : 1.10 
    } 
]; 
    return saisons; 
} 

和測試

function test(BASE_PRICE,backDay,backMonth,backYear, backHours,backMinutes, 
fromDay,fromMonth,fromYear,fromHours,fromMinutes 
){ 
var from=new Date(fromYear,fromMonth,fromDay,fromHours,fromMinutes,0) 
var back=new Date(backYear,backMonth,backDay,backHours,backMinutes,0) 
return getCostForInterval(BASE_PRICE,from,back) 
} 

解決方案不考慮時間段,在此解決方案構建的所有日期爲GMT + 0。 應該知道檢索點與迴歸點之間的時區差異。如果價格是每天夏季轉移不會造成問題,如果價格是每小時,您需要相應地調整。

如果你在客戶端使用javascript,我建議在IIFE中包裝這整個東西,並只公開函數getCostForInterval,使用http調用來檢索函數getSeasonPriceMultipliers中的季節數據,並最終uglify整個事情(源和json)

+0

「* ...此解決方案中構建的所有日期均爲GMT + 0 ... *」,只有當運行該腳本的主機的時區,或者如果您要使用'New Date(Date.UTC(2017,9- 1.17))'。沒有必要提供零值,缺省參數默認爲零(日期除外,默認值爲1)。 – RobG

+0

非常感謝你的努力! –

0

設定價格相關的信息可能會造成危險

,用戶可以簡單地修改並作出裁定,而不是15%的人說95%。所以要小心。集的價格和服務器腳本折扣不使用JavaScript

+0

非常感謝您的努力! –

-1

日期不是別的,只是一個格式化字符串,因此它可以被轉換成Date對象,形成定製日期等這意味着,你可以將它保存爲一個普通的字符串,但你需要使用已知的日期格式。

var date = "2016/02/12"; // for example 

但好,儲存摺扣日期在客戶端的JavaScript的瀏覽器給他你的JavaScript數據的完全控制,因此它可以很容易被操縱和濫用。你應該肯定使用它的一些後端。

+0

非常感謝你的努力! –

相關問題