Định dạng múi giờ javascript

Định dạng ngày giờ ISO-8601 là gì?

Chuỗi ngày giờ ISO-8601 có dạng

  1. Chẳng hạn như 2016-07-16T19. 20. 30+5. 30 khi múi giờ đi trước UTC
  2. Chẳng hạn như 2016-07-16T19. 20. 30-01. 00 khi múi giờ chậm hơn UTC
  3. Chẳng hạn như 2016-07-16T19. 20. 30Z khi múi giờ là UTC

Cũng có thể có trường mili giây, mặc dù trường đó hiếm khi được sử dụng trong thực tế

Javascript có phương thức toISOString cung cấp ngày giờ ở định dạng ISO-8601. Nhưng nó chỉ cung cấp các chuỗi ngày giờ ở định dạng UTC, YYYY-MM-DDTHH. mm. ss. sssZ . Nó không bù múi giờ theo giờ và phút. Để có được điều này, bạn cần một chút mã tùy chỉnh.

Thử nghiệm

1) Bắt Timezone Offset tính bằng Giờ & Phút

Javascript có phương thức getTimezoneOffset cung cấp chênh lệch múi giờ, tính bằng phút, từ giờ địa phương hiện tại sang UTC. Chúng tôi có thể chuyển đổi điều này thành giờ và phút và lấy phần bù múi giờ theo giờ và phút.

Lưu ý rằng getTimezoneOffset trả về giá trị bù dương nếu múi giờ địa phương ở sau UTC và âm nếu múi giờ đó ở trước. Vì vậy, chúng ta phải thêm dấu ngược lại (+ hoặc -) vào phần bù.

var timezone_offset_min = new Date().getTimezoneOffset(),
	offset_hrs = parseInt(Math.abs(timezone_offset_min/60)),
	offset_min = Math.abs(timezone_offset_min%60),
	timezone_standard;

if(offset_hrs < 10)
	offset_hrs = '0' + offset_hrs;

if(offset_min < 10)
	offset_min = '0' + offset_min;

// Add an opposite sign to the offset
// If offset is 0, it means timezone is UTC
if(timezone_offset_min < 0)
	timezone_standard = '+' + offset_hrs + ':' + offset_min;
else if(timezone_offset_min > 0)
	timezone_standard = '-' + offset_hrs + ':' + offset_min;
else if(timezone_offset_min == 0)
	timezone_standard = 'Z';

// Timezone difference in hours and minutes
// String such as +5:30 or -6:00 or Z
console.log(timezone_standard); 

2) Lấy ngày giờ

Bạn có thể lấy ngày giờ hiện tại bằng cách sử dụng đối tượng Date .

var dt = new Date(),
	current_date = dt.getDate(),
	current_month = dt.getMonth() + 1,
	current_year = dt.getFullYear(),
	current_hrs = dt.getHours(),
	current_mins = dt.getMinutes(),
	current_secs = dt.getSeconds(),
	current_datetime;

// Add 0 before date, month, hrs, mins or secs if they are less than 0
current_date = current_date < 10 ? '0' + current_date : current_date;
current_month = current_month < 10 ? '0' + current_month : current_month;
current_hrs = current_hrs < 10 ? '0' + current_hrs : current_hrs;
current_mins = current_mins < 10 ? '0' + current_mins : current_mins;
current_secs = current_secs < 10 ? '0' + current_secs : current_secs;

// Current datetime
// String such as 2016-07-16T19:20:30
current_datetime = current_year + '-' + current_month + '-' + current_date + 'T' + current_hrs + ':' + current_mins + ':' + current_secs;

Nếu bạn cũng cần mili giây, bạn có thể sử dụng phương thức getMilliseconds .

Nếu bạn muốn chuỗi ngày giờ được đặt thành ngày và giờ khác (không phải thời gian hiện tại), hãy chuyển tham số thích hợp cho Ngày . Xem thêm.

3) Kết hợp cả DateTime và Timezone Offset

Nối phần bù ngày giờ và múi giờ để nhận chuỗi ngày giờ ISO-8601

console.log(current_datetime + timezone_standard);

Sử dụng phương thức toLocaleString() để khởi tạo một ngày với múi giờ, e. g. date.toLocaleString('en-US', { timeZone: 'America/Los_Angeles'}). Phương thức này có thể được truyền ngôn ngữ và múi giờ dưới dạng tham số và trả về một chuỗi biểu thị ngày theo các giá trị được cung cấp

Đối tượng Date trong JavaScript không lưu trữ múi giờ

Nó lưu dấu thời gian biểu thị số mili giây đã trôi qua kể từ nửa đêm ngày 1 tháng 1 năm 1970

Tuy nhiên, chúng ta có thể sử dụng phương thức toLocaleString để lấy một chuỗi dành riêng cho ngôn ngữ được điều chỉnh theo múi giờ

Hai tham số chúng ta truyền cho phương thức toLocaleString

  1. locales - một chuỗi có thẻ ngôn ngữ BCP 47 hoặc một mảng các chuỗi như vậy. Bạn có thể sử dụng bất kỳ ngôn ngữ nào có sẵn, e. g. es-MX cho Mexico hoặc en-CA cho Canada. Nếu bạn cần thêm thông tin về tham số này, hãy xem
  2. Đối tượng options nơi chúng tôi đã chỉ định thuộc tính
    var dt = new Date(),
    	current_date = dt.getDate(),
    	current_month = dt.getMonth() + 1,
    	current_year = dt.getFullYear(),
    	current_hrs = dt.getHours(),
    	current_mins = dt.getMinutes(),
    	current_secs = dt.getSeconds(),
    	current_datetime;
    
    // Add 0 before date, month, hrs, mins or secs if they are less than 0
    current_date = current_date < 10 ? '0' + current_date : current_date;
    current_month = current_month < 10 ? '0' + current_month : current_month;
    current_hrs = current_hrs < 10 ? '0' + current_hrs : current_hrs;
    current_mins = current_mins < 10 ? '0' + current_mins : current_mins;
    current_secs = current_secs < 10 ? '0' + current_secs : current_secs;
    
    // Current datetime
    // String such as 2016-07-16T19:20:30
    current_datetime = current_year + '-' + current_month + '-' + current_date + 'T' + current_hrs + ':' + current_mins + ':' + current_secs;
    
    0. Đọc thêm về đối tượng options trong

Bạn có thể tìm thấy bảng mã quốc gia và tên cơ sở dữ liệu múi giờ bằng cách truy cập trang wikipedia này

Ví dụ thứ hai cho thấy cách lấy đối tượng

var dt = new Date(),
	current_date = dt.getDate(),
	current_month = dt.getMonth() + 1,
	current_year = dt.getFullYear(),
	current_hrs = dt.getHours(),
	current_mins = dt.getMinutes(),
	current_secs = dt.getSeconds(),
	current_datetime;

// Add 0 before date, month, hrs, mins or secs if they are less than 0
current_date = current_date < 10 ? '0' + current_date : current_date;
current_month = current_month < 10 ? '0' + current_month : current_month;
current_hrs = current_hrs < 10 ? '0' + current_hrs : current_hrs;
current_mins = current_mins < 10 ? '0' + current_mins : current_mins;
current_secs = current_secs < 10 ? '0' + current_secs : current_secs;

// Current datetime
// String such as 2016-07-16T19:20:30
current_datetime = current_year + '-' + current_month + '-' + current_date + 'T' + current_hrs + ':' + current_mins + ':' + current_secs;
2 có ngày và giờ được đặt theo múi giờ được cung cấp

Hàm date.toLocaleString('en-US', { timeZone: 'America/Los_Angeles'})0 có thể được truyền một đối tượng

var dt = new Date(),
	current_date = dt.getDate(),
	current_month = dt.getMonth() + 1,
	current_year = dt.getFullYear(),
	current_hrs = dt.getHours(),
	current_mins = dt.getMinutes(),
	current_secs = dt.getSeconds(),
	current_datetime;

// Add 0 before date, month, hrs, mins or secs if they are less than 0
current_date = current_date < 10 ? '0' + current_date : current_date;
current_month = current_month < 10 ? '0' + current_month : current_month;
current_hrs = current_hrs < 10 ? '0' + current_hrs : current_hrs;
current_mins = current_mins < 10 ? '0' + current_mins : current_mins;
current_secs = current_secs < 10 ? '0' + current_secs : current_secs;

// Current datetime
// String such as 2016-07-16T19:20:30
current_datetime = current_year + '-' + current_month + '-' + current_date + 'T' + current_hrs + ':' + current_mins + ':' + current_secs;
2 hoặc một chuỗi ngày và trả về một đối tượng
var dt = new Date(),
	current_date = dt.getDate(),
	current_month = dt.getMonth() + 1,
	current_year = dt.getFullYear(),
	current_hrs = dt.getHours(),
	current_mins = dt.getMinutes(),
	current_secs = dt.getSeconds(),
	current_datetime;

// Add 0 before date, month, hrs, mins or secs if they are less than 0
current_date = current_date < 10 ? '0' + current_date : current_date;
current_month = current_month < 10 ? '0' + current_month : current_month;
current_hrs = current_hrs < 10 ? '0' + current_hrs : current_hrs;
current_mins = current_mins < 10 ? '0' + current_mins : current_mins;
current_secs = current_secs < 10 ? '0' + current_secs : current_secs;

// Current datetime
// String such as 2016-07-16T19:20:30
current_datetime = current_year + '-' + current_month + '-' + current_date + 'T' + current_hrs + ':' + current_mins + ':' + current_secs;
2 có ngày và giờ của múi giờ được cung cấp

Tuy nhiên, mặc dù ngày và giờ trong đối tượng ngày tương ứng với múi giờ, nhưng đối tượng

var dt = new Date(),
	current_date = dt.getDate(),
	current_month = dt.getMonth() + 1,
	current_year = dt.getFullYear(),
	current_hrs = dt.getHours(),
	current_mins = dt.getMinutes(),
	current_secs = dt.getSeconds(),
	current_datetime;

// Add 0 before date, month, hrs, mins or secs if they are less than 0
current_date = current_date < 10 ? '0' + current_date : current_date;
current_month = current_month < 10 ? '0' + current_month : current_month;
current_hrs = current_hrs < 10 ? '0' + current_hrs : current_hrs;
current_mins = current_mins < 10 ? '0' + current_mins : current_mins;
current_secs = current_secs < 10 ? '0' + current_secs : current_secs;

// Current datetime
// String such as 2016-07-16T19:20:30
current_datetime = current_year + '-' + current_month + '-' + current_date + 'T' + current_hrs + ':' + current_mins + ':' + current_secs;
2 trong JavaScript không có cách nào lưu trữ múi giờ cụ thể

Vì lý do này, tốt nhất bạn nên sử dụng phương thức toLocaleString để lấy chuỗi đại diện cho múi giờ và sử dụng tham số đối tượng options để định dạng chuỗi theo nhu cầu của bạn

Bạn có thể sử dụng các thuộc tính khác nhau trên đối tượng options của phương thức toLocaleString để định dạng ngày và giờ cho múi giờ cụ thể theo nhiều cách khác nhau

Chúng tôi đặt các thuộc tính date.toLocaleString('en-US', { timeZone: 'America/Los_Angeles'})8 và date.toLocaleString('en-US', { timeZone: 'America/Los_Angeles'})9 trong đối tượng options thành toLocaleString1 để có được biểu diễn chi tiết hơn về ngày và giờ

Các giá trị có thể khác cho hai thuộc tính là. toLocaleString2, toLocaleString3 và toLocaleString4

Bạn có thể xem tất cả các thuộc tính và giá trị mà đối tượng options chứa bằng cách truy cập

Dưới đây là một ví dụ hiển thị tháng, ngày, giờ, phút và giây dưới dạng 2 chữ số, ngay cả khi giá trị của chúng nhỏ hơn toLocaleString6

Bằng cách đặt giá trị của các thành phần ngày và giờ thành toLocaleString7 chữ số, chúng tôi định dạng chúng một cách nhất quán, ngay cả khi chúng có giá trị nhỏ hơn toLocaleString6

Trong trường hợp đó, các giá trị được đệm bằng số 0 đứng đầu

Chúng tôi cũng đặt thuộc tính toLocaleString9 thành giá trị của toLocaleString4, để hiển thị tên viết tắt của tên múi giờ ở cuối kết quả

Đối tượng JavaScript

var dt = new Date(),
	current_date = dt.getDate(),
	current_month = dt.getMonth() + 1,
	current_year = dt.getFullYear(),
	current_hrs = dt.getHours(),
	current_mins = dt.getMinutes(),
	current_secs = dt.getSeconds(),
	current_datetime;

// Add 0 before date, month, hrs, mins or secs if they are less than 0
current_date = current_date < 10 ? '0' + current_date : current_date;
current_month = current_month < 10 ? '0' + current_month : current_month;
current_hrs = current_hrs < 10 ? '0' + current_hrs : current_hrs;
current_mins = current_mins < 10 ? '0' + current_mins : current_mins;
current_secs = current_secs < 10 ? '0' + current_secs : current_secs;

// Current datetime
// String such as 2016-07-16T19:20:30
current_datetime = current_year + '-' + current_month + '-' + current_date + 'T' + current_hrs + ':' + current_mins + ':' + current_secs;
2 theo dõi thời gian theo UTC trong nội bộ, nhưng hầu hết các phương thức của nó (ngoại trừ những phương thức có tên UTC) trả về kết quả theo giờ địa phương của khách truy cập (múi giờ máy tính của khách truy cập)

Cách tốt nhất là lưu trữ dấu thời gian UTC hoặc chuỗi ISO 8601 trong cơ sở dữ liệu của bạn và sử dụng giờ địa phương khi bạn phải hiển thị ngày và giờ cho người dùng

Một ngoại lệ đối với quy tắc này là, ví dụ: nếu bạn có một doanh nghiệp địa phương và tất cả khách truy cập của bạn đến từ cùng một múi giờ, thì bạn có thể lưu trữ ngày và giờ cụ thể theo múi giờ trong cơ sở dữ liệu của mình

Làm cách nào để đặt định dạng thời gian trong JavaScript?

sssZ , ở đâu. .
YYYY-MM-DD – là ngày. năm tháng ngày
Ký tự "T" được sử dụng làm dấu phân cách
hộ. mm. ss. sss - là thời gian. giờ, phút, giây và mili giây
Phần 'Z' tùy chọn biểu thị múi giờ ở định dạng +-hh. mm. Một chữ cái Z có nghĩa là UTC+0

Làm cách nào để lấy định dạng ngày từ múi giờ trong JavaScript?

Ngày. nguyên mẫu. toISOString() . mm. ss. sssZ hoặc ±YYYY-MM-DDTHH. mm. ss. sssZ , tương ứng). Múi giờ luôn bằng 0 độ lệch UTC, được biểu thị bằng hậu tố Z.

Làm cách nào để đặt múi giờ trong JavaScript?

Sử dụng phương thức toLocaleString() để khởi tạo ngày theo múi giờ , e. g. ngày tháng. toLocaleString('en-US', { timeZone. 'Mỹ/Los_Angeles'}). Phương thức này có thể được truyền ngôn ngữ và múi giờ dưới dạng tham số và trả về một chuỗi biểu thị ngày theo các giá trị được cung cấp.

Làm cách nào để đặt bù múi giờ trong JavaScript?

Phương thức getTimezoneOffset() của JavaScript được sử dụng để tìm phần bù múi giờ . Nó trả về chênh lệch múi giờ tính bằng phút, giữa UTC và giờ địa phương hiện tại. Nếu giá trị trả về là dương, thì múi giờ địa phương nằm sau UTC và nếu giá trị đó là âm, múi giờ địa phương nếu trước UTC.