Hướng dẫn date range javascript - javascript phạm vi ngày

Hướng dẫn date range javascript - javascript phạm vi ngày

Có thể bạn đã từng gặp trường hợp như thế này, 1 chức năng nhỏ trong tìm kiếm, trong đó có 2 option chọn ngày CheckIn & CheckOut sử dụng Datepicker và bạn nghĩ ngay phải tạo một Date Range Picker với Bootstrap Datepicker

Yêu cầu là ngày Check-in phải lớn hơn hoặc bằng ngày hiện tại, và ngày Check-out phải lớn hơn ngày Check-in, không cho phép chọn ngược về quá khứ. Date Range Date Range Date Range

Hướng dẫn date range javascript - javascript phạm vi ngày

Vậy phải xử lý như thế nào? Sau đây là cách giải quyết:

Demo Download

1. Chuẩn bị:

Các bạn cần download thư viện Bootstrap, và DatepickerBootstrap, và Datepicker

2. Css:

Ở phần của trang, ta thêm 2 thư viện Css của Bootstrap & Datepicker


3. Html:

Về html ta chỉ cần 2 cái input text để dùng làm checkin & checkout

Check In: Check Out:

4. Javascript (jQuery)

Bạn cần thêm 3 cái file js vào cuối trang nữa, trên thẻ đóng



Và một đoạn mã Js để hiện thị Datepicker và giới hạn khoảng thời gian lựa chọn theo yêu cầu đặt ra ban đầu:

Vậy là ok. Chúc các bạn thành công!

  • " Trước
  • Tiếp theo "

Chương này giới thiệu các khái niệm, đối tượng và chức năng được sử dụng để làm việc và thực hiện các tính toán bằng cách sử dụng các số và ngày trong JavaScript. Điều này bao gồm việc sử dụng các số được viết trong các cơ sở khác nhau bao gồm thập phân, nhị phân và thập lục phân, cũng như việc sử dụng đối tượng

Check In: Check Out:
9 toàn cầu để thực hiện nhiều hoạt động toán học trên các số.

Số

Trong JavaScript, các số được thực hiện ở định dạng nhị phân 64 bit chính xác kép IEEE 754 (tức là, một số giữa ± 2^−1022 và ± 2^+1023, hoặc khoảng ± 10^−308 đến ± 10^+308, với độ chính xác số 53 bit). Các giá trị số nguyên lên đến ± 2^53 - 1 có thể được biểu diễn chính xác.

Ngoài việc có thể đại diện cho các số điểm nổi, loại số có ba giá trị tượng trưng:



0


1,


2


1 và


4 (không phải là một số).

Xem thêm các kiểu và cấu trúc dữ liệu JavaScript cho bối cảnh với các loại nguyên thủy khác trong JavaScript.

Bạn có thể sử dụng bốn loại chữ số: thập phân, nhị phân, bát phân và thập lục phân.

Số thập phân

1234567890
42

// Caution when using leading zeros:

0888 // 888 parsed as decimal
0777 // parsed as octal in non-strict mode (511 in decimal)

Lưu ý rằng các chữ thập phân có thể bắt đầu bằng số 0 (



5) theo sau là một chữ số thập phân khác, nhưng nếu mỗi chữ số sau


5 hàng đầu nhỏ hơn 8, số lượng được phân tích cú pháp dưới dạng số bát phân.

Số nhị phân

Cú pháp số nhị phân sử dụng số 0 hàng đầu theo sau là chữ thường hoặc chữ in hoa "B" (



7 hoặc


8). Nếu các chữ số sau


7 không phải là 0 hoặc 1, thì
0 sau đây sẽ được ném: "Thiếu các chữ số nhị phân sau 0b".

const FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
const FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
const FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607

Số bát phân

Cú pháp tiêu chuẩn cho các số bát phân là tiền tố chúng với

1. Ví dụ:

Ngoài ra còn có một cú pháp kế thừa cho các số bát phân - bằng cách tiền tố số octal bằng số 0:

2 và
3. Nếu các chữ số sau


5 nằm ngoài phạm vi từ 0 đến 7, số sẽ được hiểu là số thập phân.

const n = 0755; // 493
const m = 0644; // 420

Chế độ nghiêm ngặt cấm cú pháp octal này.

Số thập lục phân

Cú pháp số thập lục phân sử dụng số 0 hàng đầu, theo sau là chữ thường hoặc chữ in hoa "x" (

5 hoặc
6). Nếu các chữ số sau 0x nằm ngoài phạm vi (0123456789ABCDEF), thì
0 sau đây sẽ được ném: "Định danh bắt đầu ngay sau khi chữ số".

0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF   // 81985529216486900
0XA                 // 10

Số mũ

1E3   // 1000
2e6   // 2000000
0.1e2 // 10

Đối tượng số

Đối tượng

8 tích hợp có các thuộc tính cho các hằng số số, chẳng hạn như giá trị tối đa, không phải là số và vô cực. Bạn không thể thay đổi các giá trị của các thuộc tính này và bạn sử dụng chúng như sau:

const biggestNum = Number.MAX_VALUE;
const smallestNum = Number.MIN_VALUE;
const infiniteNum = Number.POSITIVE_INFINITY;
const negInfiniteNum = Number.NEGATIVE_INFINITY;
const notANum = Number.NaN;

Bạn luôn đề cập đến một thuộc tính của đối tượng

8 được xác định trước như được hiển thị ở trên, và không phải là thuộc tính của đối tượng
8 mà bạn tự tạo.

Bảng sau đây tóm tắt các thuộc tính của đối tượng

8.

Nguyên mẫu

8 cung cấp các phương thức để truy xuất thông tin từ các đối tượng
8 ở các định dạng khác nhau. Bảng sau đây tóm tắt các phương pháp của
1234567890
42

// Caution when using leading zeros:

0888 // 888 parsed as decimal
0777 // parsed as octal in non-strict mode (511 in decimal)
4.

Đối tượng toán học

Đối tượng

Check In: Check Out:
9 tích hợp có các thuộc tính và phương pháp cho các hằng số và chức năng toán học. Ví dụ: thuộc tính
1234567890
42

// Caution when using leading zeros:

0888 // 888 parsed as decimal
0777 // parsed as octal in non-strict mode (511 in decimal)
7 của đối tượng
Check In: Check Out:
9 có giá trị của PI (3.141,), mà bạn sẽ sử dụng trong một ứng dụng làm

Tương tự, các hàm toán học tiêu chuẩn là phương pháp của

Check In: Check Out:
9. Chúng bao gồm lượng giác, logarit, hàm mũ và các hàm khác. Ví dụ: nếu bạn muốn sử dụng sin hàm lượng giác, bạn sẽ viết

Lưu ý rằng tất cả các phương pháp lượng giác của

Check In: Check Out:
9 đều có đối số trong radian.

Bảng sau đây tóm tắt các phương thức của đối tượng

Check In: Check Out:
9.

Không giống như nhiều đối tượng khác, bạn không bao giờ tạo một đối tượng

Check In: Check Out:
9 của riêng bạn. Bạn luôn sử dụng đối tượng
Check In: Check Out:
9 tích hợp.

Lớn

Một thiếu sót của các giá trị số là chúng chỉ có 64 bit. Trong thực tế, do sử dụng mã hóa IEEE 754, chúng không thể đại diện cho bất kỳ số nguyên nào lớn hơn

const FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
const FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
const FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
3 (là 253 - 1) chính xác. Để giải quyết nhu cầu mã hóa dữ liệu nhị phân và tương tác với các ngôn ngữ khác cung cấp các số nguyên rộng như
const FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
const FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
const FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
4 (số nguyên 64 bit) và
const FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
const FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
const FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
5 (số nguyên 128 bit), JavaScript cũng cung cấp một loại dữ liệu khác để thể hiện số nguyên lớn tùy ý:
const FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
const FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
const FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
6.

Một bigint có thể được định nghĩa là một hậu tố số nguyên theo nghĩa đen của

const FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
const FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
const FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
7:

Check In: Check Out:
0

Bigints cũng có thể được xây dựng từ các giá trị số hoặc giá trị chuỗi bằng hàm tạo

const FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
const FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
const FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
6.

Check In: Check Out:
1

Về mặt khái niệm, một Bigint chỉ là một chuỗi các bit dài tùy ý mã hóa một số nguyên. Bạn có thể thực hiện bất kỳ hoạt động số học nào mà không mất độ chính xác hoặc quá mức.

Check In: Check Out:
2

So với các con số, các giá trị lớn mang lại độ chính xác cao hơn khi đại diện cho các số nguyên lớn; Tuy nhiên, chúng không thể đại diện cho số điểm nổi. Ví dụ, phân chia sẽ làm tròn đến 0:

Check In: Check Out:
3

Các hàm

Check In: Check Out:
9 không thể được sử dụng trên các giá trị lớn. Có một đề xuất mở để làm quá tải một số hàm
Check In: Check Out:
9 như
const n = 0755; // 493
const m = 0644; // 420
1 để cho phép các giá trị lớn.

Chọn giữa Bigint và số phụ thuộc vào trường hợp sử dụng và phạm vi đầu vào của bạn. Độ chính xác của các con số sẽ có thể đáp ứng hầu hết các nhiệm vụ hàng ngày và Bigint là phù hợp nhất để xử lý dữ liệu nhị phân.

Đọc thêm về những gì bạn có thể làm với các giá trị lớn trong phần Biểu thức và toán tử hoặc tham chiếu Bigint.

Đối tượng ngày

JavaScript không có kiểu dữ liệu ngày. Tuy nhiên, bạn có thể sử dụng đối tượng

const n = 0755; // 493
const m = 0644; // 420
2 và các phương thức của nó để làm việc với ngày và thời gian trong các ứng dụng của bạn. Đối tượng
const n = 0755; // 493
const m = 0644; // 420
2 có một số lượng lớn các phương thức để thiết lập, nhận và thao tác ngày. Nó không có bất kỳ tài sản.

JavaScript xử lý ngày tương tự như Java. Hai ngôn ngữ có nhiều phương pháp cùng ngày và cả hai ngôn ngữ đều lưu trữ ngày là số mili giây kể từ ngày 1 tháng 1 năm 1970, 00:00:00, với dấu thời gian UNIX là số giây kể từ ngày 1 tháng 1 năm 1970, 00: 00: 00:00.

Phạm vi đối tượng

const n = 0755; // 493
const m = 0644; // 420
2 là -100.000.000 ngày đến 100.000.000 ngày so với ngày 01 tháng 1 năm 1970 UTC.

Để tạo đối tượng

const n = 0755; // 493
const m = 0644; // 420
2:

Check In: Check Out:
4

trong đó

const n = 0755; // 493
const m = 0644; // 420
6 là tên của đối tượng
const n = 0755; // 493
const m = 0644; // 420
2 được tạo; Nó có thể là một đối tượng mới hoặc một thuộc tính của một đối tượng hiện có.

Gọi

const n = 0755; // 493
const m = 0644; // 420
2 mà không có từ khóa
const n = 0755; // 493
const m = 0644; // 420
9 trả về một chuỗi đại diện cho ngày và thời gian hiện tại.

0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF   // 81985529216486900
0XA                 // 10
0 trong cú pháp trước đó có thể là bất kỳ điều nào sau đây:

  • Không có gì: tạo ra ngày và giờ hôm nay. Ví dụ,
    0xFFFFFFFFFFFFFFFFF // 295147905179352830000
    0x123456789ABCDEF   // 81985529216486900
    0XA                 // 10
    
    1.
  • Một chuỗi đại diện cho một ngày trong mẫu sau: "Ngày tháng, giờ năm: Biên bản: giây." Ví dụ,
    0xFFFFFFFFFFFFFFFFF // 295147905179352830000
    0x123456789ABCDEF   // 81985529216486900
    0XA                 // 10
    
    2. Nếu bạn bỏ qua hàng giờ, phút hoặc giây, giá trị sẽ được đặt thành 0.
  • Một tập hợp các giá trị số nguyên cho năm, tháng và ngày. Ví dụ,
    0xFFFFFFFFFFFFFFFFF // 295147905179352830000
    0x123456789ABCDEF   // 81985529216486900
    0XA                 // 10
    
    3.
  • Một tập hợp các giá trị số nguyên cho năm, tháng, ngày, giờ, phút và giây. Ví dụ,
    0xFFFFFFFFFFFFFFFFF // 295147905179352830000
    0x123456789ABCDEF   // 81985529216486900
    0XA                 // 10
    
    4.

Phương thức của đối tượng ngày

Các phương thức đối tượng

const n = 0755; // 493
const m = 0644; // 420
2 để xử lý ngày và thời gian rơi vào các loại rộng này:

  • Các phương thức "Đặt", để thiết lập các giá trị ngày và thời gian trong các đối tượng
    const n = 0755; // 493
    const m = 0644; // 420
    
    2.
  • Các phương thức "Nhận", để nhận giá trị ngày và thời gian từ các đối tượng
    const n = 0755; // 493
    const m = 0644; // 420
    
    2.
  • "To" Các phương thức, để trả về các giá trị chuỗi từ các đối tượng
    const n = 0755; // 493
    const m = 0644; // 420
    
    2.
  • Phương pháp phân tích và UTC, để phân tích các chuỗi
    const n = 0755; // 493
    const m = 0644; // 420
    
    2.

Với các phương pháp "Get" và "Set", bạn có thể nhận được và đặt vài giây, phút, giờ, ngày của tháng, ngày của tuần, tháng và năm. Có một phương thức

1E3   // 1000
2e6   // 2000000
0.1e2 // 10
0 trả về ngày trong tuần, nhưng không có phương thức
1E3   // 1000
2e6   // 2000000
0.1e2 // 10
1 tương ứng, bởi vì ngày trong tuần được đặt tự động. Các phương pháp này sử dụng số nguyên để biểu diễn các giá trị này như sau:

  • Giây và phút: 0 đến 59
  • Giờ: 0 đến 23
  • Ngày: 0 (Chủ nhật) đến 6 (Thứ Bảy)
  • Ngày: 1 đến 31 (ngày của tháng)
  • Tháng: 0 (tháng 1) đến 11 (tháng 12)
  • Năm: Năm kể từ năm 1900

Ví dụ: giả sử bạn xác định ngày sau:

Check In: Check Out:
5

Sau đó

1E3   // 1000
2e6   // 2000000
0.1e2 // 10
2 trả lại 11 và
1E3   // 1000
2e6   // 2000000
0.1e2 // 10
3 trở lại năm 1995.

Các phương pháp

1E3   // 1000
2e6   // 2000000
0.1e2 // 10
4 và
1E3   // 1000
2e6   // 2000000
0.1e2 // 10
5 rất hữu ích để so sánh ngày. Phương pháp
1E3   // 1000
2e6   // 2000000
0.1e2 // 10
4 trả về số mili giây kể từ ngày 1 tháng 1 năm 1970, 00:00:00 cho một đối tượng
const n = 0755; // 493
const m = 0644; // 420
2.

Ví dụ: mã sau hiển thị số ngày còn lại trong năm hiện tại:

Check In: Check Out:
6

Ví dụ này tạo ra một đối tượng

const n = 0755; // 493
const m = 0644; // 420
2 có tên
1E3   // 1000
2e6   // 2000000
0.1e2 // 10
9 có chứa ngày hôm nay. Sau đó, nó tạo ra một đối tượng
const n = 0755; // 493
const m = 0644; // 420
2 có tên
const biggestNum = Number.MAX_VALUE;
const smallestNum = Number.MIN_VALUE;
const infiniteNum = Number.POSITIVE_INFINITY;
const negInfiniteNum = Number.NEGATIVE_INFINITY;
const notANum = Number.NaN;
1 và đặt năm thành năm hiện tại. Sau đó, sử dụng số mili giây mỗi ngày, nó tính toán số ngày từ
1E3   // 1000
2e6   // 2000000
0.1e2 // 10
9 đến
const biggestNum = Number.MAX_VALUE;
const smallestNum = Number.MIN_VALUE;
const infiniteNum = Number.POSITIVE_INFINITY;
const negInfiniteNum = Number.NEGATIVE_INFINITY;
const notANum = Number.NaN;
1, sử dụng
1E3   // 1000
2e6   // 2000000
0.1e2 // 10
4 và làm tròn đến một số ngày.

Phương thức

const biggestNum = Number.MAX_VALUE;
const smallestNum = Number.MIN_VALUE;
const infiniteNum = Number.POSITIVE_INFINITY;
const negInfiniteNum = Number.NEGATIVE_INFINITY;
const notANum = Number.NaN;
5 rất hữu ích cho việc gán các giá trị từ các chuỗi ngày cho các đối tượng
const n = 0755; // 493
const m = 0644; // 420
2 hiện có. Ví dụ: mã sau sử dụng
const biggestNum = Number.MAX_VALUE;
const smallestNum = Number.MIN_VALUE;
const infiniteNum = Number.POSITIVE_INFINITY;
const negInfiniteNum = Number.NEGATIVE_INFINITY;
const notANum = Number.NaN;
5 và
1E3   // 1000
2e6   // 2000000
0.1e2 // 10
5 để gán giá trị ngày cho đối tượng
const biggestNum = Number.MAX_VALUE;
const smallestNum = Number.MIN_VALUE;
const infiniteNum = Number.POSITIVE_INFINITY;
const negInfiniteNum = Number.NEGATIVE_INFINITY;
const notANum = Number.NaN;
9:

Check In: Check Out:
7

Thí dụ

Trong ví dụ sau, hàm

Check In: Check Out:
00 trả về thời gian ở định dạng của đồng hồ kỹ thuật số.

Check In: Check Out:
8

Hàm

Check In: Check Out:
01 trước tiên tạo ra một đối tượng
const n = 0755; // 493
const m = 0644; // 420
2 mới được gọi là
Check In: Check Out:
03; Vì không có đối số nào được đưa ra, thời gian được tạo ra với ngày và giờ hiện tại. Sau đó, gọi đến các phương thức
Check In: Check Out:
04,
Check In: Check Out:
05 và
Check In: Check Out:
06 gán giá trị của giờ, phút và thứ hai hiện tại cho
Check In: Check Out:
07,
Check In: Check Out:
08 và
Check In: Check Out:
09.

Các câu sau đây xây dựng một giá trị chuỗi dựa trên thời gian. Câu lệnh đầu tiên tạo ra một biến

Check In: Check Out:
10. Giá trị của nó là
Check In: Check Out:
11, đó là
Check In: Check Out:
07 trong hệ thống 12 giờ. Sau đó, nếu giờ là


5, nó sẽ được gán lại thành
Check In: Check Out:
14, do đó nửa đêm và buổi trưa được hiển thị là
Check In: Check Out:
15 thay vì
Check In: Check Out:
16.

Câu lệnh tiếp theo nối lại giá trị

Check In: Check Out:
08 vào
Check In: Check Out:
10. Nếu giá trị của
Check In: Check Out:
08 nhỏ hơn 10, biểu thức có điều kiện sẽ thêm một chuỗi có số 0 trước; Nếu không, nó thêm một chuỗi với một dấu hai chấm. Sau đó, một câu lệnh có giá trị giây vào
Check In: Check Out:
10 theo cùng một cách.

Cuối cùng, một biểu thức có điều kiện bổ sung "p.m." đến

Check In: Check Out:
10 nếu
Check In: Check Out:
07 là 12 hoặc lớn hơn; Nếu không, nó cộng đồng "A.M." đến
Check In: Check Out:
10.

  • " Trước
  • Tiếp theo "