Thông tin cơ bảnTrong khi vòng lặp đếm tăng dần "theo cấp số nhân" mặc dù sử dụng ++
tôi đang thiết lập một chức năng mà tạo ra một mảng ngày dựa trên một ngày bắt đầu và ngày kết thúc.
Hàm sẽ nhận ngày bắt đầu và ngày kết thúc, định dạng đầu tiên được định dạng thành định dạng year-month-dayT12:00:00:00
và sau đó được chuyển đổi thành mili giây với định dạng .getTime()
.
Kịch bản của tôi
tôi đã thực hiện các kịch bản sau đây để tạo mảng.
var $date_array = [];
function calc_workdays_between_dates (a, b) {
function $create_date_array ($start_date, $end_date) {
var $counter = 0;
while ($start_date !== $end_date) {
var x = new Date($start_date);
x.setDate(x.getDate() + $counter);
$date_array.push(x);
$start_date = x.getTime();
$counter++;
}
}
$create_date_array (a, b);
}
Xin lưu ý rằng có một lý do để làm tổ các $create_date_array
chức năng bên trong $calc_workdays_between_dates
chức năng. Bây giờ tôi đã loại bỏ tất cả các phần khác của hàm $calc_workdays_between_dates
để tập trung hoàn toàn vào vấn đề (tôi cũng đang chạy thử nghiệm của mình trên phiên bản bị tước bỏ này - vì vậy phần còn lại của hàm không có ảnh hưởng đến bất kỳ thứ gì).
Vấn đề của tôi
Ví dụ 1:
Nếu tôi gọi hàm với calc_workdays_between_dates (x1, x2);
nơi:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-07")
nó kết quả trong $date_array
nhận được các nội dung sau:
Sat Apr 04 2015 12:00:00 GMT+0200 (CEST)
Sun Apr 05 2015 12:00:00 GMT+0200 (CEST)
Tue Apr 07 2015 12:00:00 GMT+0200 (CEST)
Như bạn có thể thấy hàm vì một số lý do bỏ qua thứ hai (một ngày trong tổng số).
Ví dụ 2:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-10")
kết quả trong:
Sat Apr 04 2015 12:00:00 GMT+0200 (CEST)
Sun Apr 05 2015 12:00:00 GMT+0200 (CEST)
Tue Apr 07 2015 12:00:00 GMT+0200 (CEST)
Fri Apr 10 2015 12:00:00 GMT+0200 (CEST)
Như bạn có thể thấy các chức năng bằng cách nào đó bỏ qua thứ Hai, thứ Tư và thứ Năm (3 ngày trong tổng số).
Ví dụ 3:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-14")
kết quả trong:
Sat Apr 04 2015 12:00:00 GMT+0200 (CEST)
Sun Apr 05 2015 12:00:00 GMT+0200 (CEST)
Tue Apr 07 2015 12:00:00 GMT+0200 (CEST)
Fri Apr 10 2015 12:00:00 GMT+0200 (CEST)
Tue Apr 14 2015 12:00:00 GMT+0200 (CEST)
Như bạn có thể thấy các chức năng trong thise dụ bỏ qua thứ Hai, thứ Tư, thứ Năm, thứ Bảy, Chủ nhật và thứ Hai (6 ngày Tổng cộng).
Ví dụ 4:
x1 = new Date("2015-04-04") //formatted and converted to ms before invoking function
x2 = new Date("2015-04-08")
kết quả trong chức năng không làm việc. Có vẻ như vòng lặp while vẫn tiếp tục chạy không ngừng.
Câu hỏi của tôi
gì đang thực hiện kịch bản bỏ qua ngày?
Ehm, '$ create_date_array' func của bạn hy vọng một 'Date' đối tượng, nhưng bạn đang đi qua một mảng (' x1 = [new Date ("2015-04- 04 ")]'). Tui bỏ lỡ điều gì vậy? –
@NikolaDimitroff: Hàm '$ create_date_array' nhận các ngày theo mili giây sau đó được chuyển đổi thành ngày chính hàm của tôi trước khi thực hiện bất kỳ phép tính nào. Đó là một lỗi khác mà các ngày xuất hiện trong dấu ngoặc đơn. Tôi đã xóa chúng. – rabbitco