JavaScript将单个值存储为日期格式

时间:2016-10-02 17:40:30

标签: javascript date conditional

我正在开发一个“租车”网络应用程序......所以,用户可以选择日期“从”和“直到”他想租一辆车..这些值存储在单个变量中(见下文) :

//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;
}

我希望我的问题足够明确!

提前致谢!

丹尼斯

3 个答案:

答案 0 :(得分:0)

通过客户端脚本设置价格相关信息可能很危险

如果您通过JavaScript设置折扣,用户只需修改它并下订单,而不是15%说95%。所以要小心。使用服务器脚本设置价格和折扣而不是使用JavaScript

答案 1 :(得分:0)

我相信@Softberry是对的,你不应该把它放在客户端。

我纳入了@RobG建议的更改。 (

  

“......此解决方案中构造的所有日期均为GMT + 0 ...”,前提是这是运行脚本的主机的时区,或者您是否使用新日期(Date.UTC(2017,9-1) ,17))。无需提供零值,缺省参数默认为零(日期除外,默认为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整个事物(source和json)< / p>

答案 2 :(得分:-1)

日期只不过是格式化的字符串,因此它可以转换为Date对象,形成自定义日期等。这意味着您可以将其存储为普通字符串,但您需要使用已知的日期格式。 / p>

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

但是,使用javascript将折扣日期存储在客户端的浏览器中可以让他完全控制您的javascript数据,因此可以轻松操作和滥用。你肯定应该使用一些后端。