You can use a dateDiff
function to compare dates and return the number of days between these dates. For example, you might want to charge a premium for orders that need to be completed faster than your standard processing time.
To calculate the difference between the creation date and the due date:
function dateDiff(d1, d2)
{
var utcD1 = Date.UTC(d1.getFullYear(), d1.getMonth(), d1.getDate());
var utcD2 = Date.UTC(d2.getFullYear(), d2.getMonth(), d2.getDate());
return parseInt((utcD1 - utcD2) / (1000 * 60 * 60 * 24));
}
Where:
- d1 — the later date (due date)
- d2 — the earlier date (creation date)
This function returns the time in milliseconds, so you need to convert milliseconds into days by dividing the return value by (1000 * 60 * 60 * 24)
.
Example
If you want to charge an extra $7.50 for orders that are required in 2 days or less, you would firstly define the above function to determine the difference between the creation date and due date. You would then define a deliveryCost variable in your estimateCost(order) function , as follows:
deliveryCost = order.deliveryOption.cost;
// Check if a due date has been selected
if (order.due) {
var dueDate = new Date(order.due);
// Get the order creation date. First check that the order created date
// is not null.
var createdDate = order.created ? new Date(order.created) : new Date();
// Find the difference in days between the order creation date,
// and when the order is due.
var numberOfDays = dateDiff(dueDate, createdDate)
// If the order is required within 2 days, add $7.50 to the cost.
if (numberOfDays <= 2) {
deliveryCost = deliveryCost + 7.5;
}
}
Comments