[我希望有人能帮助我找出如何编写应用程序的代码,该应用程序允许您使用jquery datepicker选择邮寄日期,从下拉列表中选择标准或一流送货,并计算预计的送货日期窗口(7-标准课程12天,头等舱3-5天。
[当“ Mailing in” [number]“ Days”接受字符串输入时,它起作用了,但是当我为datepicker添加代码时,它就坏了。
我还需要将周末和节假日排除在运输计算之外。
这里是完整笔的链接:https://codepen.io/allyjfuller/pen/oNXvwJL
$('#calculateShippingEstimate').click(function( event ) {
//Prevent button from 'submitting' and reloading the page
event.preventDefault();
//Capture the mailing date
var $mailingDate = $("#mailingDate").val();
var $postageType = $("#postageType").val();
var $shipStateShippingDuration = eval('data.shipTimes.' + $postageType);
var $totalShippingTime = parseInt($mailingDate) + parseInt($shipStateShippingDuration);
//Create the date
var date = new Date();
var month = date.getMonth()+1;
var day = date.getDate() + parseInt($totalShippingTime);
var year = date.getFullYear();
<form>
<section>
<label>Mailing on</label>
<input id="mailingDate" placeholder="number"></input>
</section>
<section>
<label>Postage:</label>
<select id="postageType">
<option value="Standard">Standard</option>
<option value="FirstClass">First-Class</option>
</select>
</section>
<input class="button" id="calculateShippingEstimate" type="submit" value="Get Estimated Delivery Date"></input>
<div class="results"></div>
</form>
浏览您的代码片段,似乎您想尝试推出JS Date框架中已经存在的许多功能。
一旦获得开始日期和运输天数,您可以将这些天加在一起以创建最终运输日期。从那里开始并在一个循环中,您可能一天又一天地检查当前日期索引是否为工作日(使用Date.getDay())。
因此,您可以检查星期六[6]和星期日[0],然后在最终日期的顶部添加所需的天数。
我在下面的控制台调试中包含了我的代码版本,但尚未添加代码假期。可以检查假期是否使用数组或地图。获取一年的所有假期日期,然后让当前索引检查假期数组/地图以查看是否有匹配项。如果有的话,请在截止日期后再增加一天。
addDays的功能从here中提取。它添加了一些说明,我认为会对您有所帮助。
function addDays(date, days) {
const copy = new Date(Number(date))
copy.setDate(date.getDate() + days)
return copy
}
// FINAL SHIPPING ESTIMATE
$('#calculateShippingEstimate').click(function( event ) {
event.preventDefault();
let mailingDateVal = $("#mailingDate").val();
let shippingDuration = data.shipTimes[$("#postageType").val()];
let mailingDate = new Date(mailingDateVal);
console.log("final Date: " + addDays(mailingDate, shippingDuration));
let finalDate = addDays(mailingDate, shippingDuration)
let mailingDateIndex = new Date(mailingDate);
while(mailingDateIndex <= finalDate) {
console.log("current mailDateIndex: " + mailingDateIndex)
if (mailingDateIndex === finalDate) {
break;
}
// Weekend
console.log(mailingDateIndex.getDay());
if (mailingDateIndex.getDay() == 0 || mailingDateIndex.getDay() == 6) {
console.log("weekend day hit! Adding day to final...")
finalDate = addDays(finalDate, 1);
}
mailingDateIndex = addDays(mailingDateIndex, 1);
}
});