Định dạng này có nghĩa là gì T00: 00: 00.000Z?


Câu trả lời:


84

Đó là một phần của biểu thị ngày ISO-8601 . Nó không đầy đủ vì một biểu diễn ngày đầy đủ trong mẫu này cũng phải chứa ngày:

2015-03-04T00:00:00.000Z //Complete ISO-8601 date

Nếu bạn cố gắng phân tích cú pháp ngày này, bạn sẽ nhận được Invalid Datelỗi:

new Date('T00:00:00.000Z'); // Invalid Date

Vì vậy, tôi đoán cách phân tích cú pháp dấu thời gian ở định dạng này là ghép với bất kỳ ngày nào

new Date('2015-03-04T00:00:00.000Z'); // Valid Date

Sau đó, bạn chỉ có thể trích xuất phần bạn muốn (phần dấu thời gian)

var d = new Date('2015-03-04T00:00:00.000Z');
console.log(d.getUTCHours()); // Hours
console.log(d.getUTCMinutes());
console.log(d.getUTCSeconds());

2
Đóng - bạn nên sử dụng getUTCHours, getUTCMinutesgetUTCSeconds. Nếu không, bạn đang truyền đạt hành vi của múi giờ địa phương, điều này sẽ mang lại các kết quả khác nhau tùy thuộc vào múi giờ nào và vào ngày bạn chọn - do DST.
Matt Johnson-Pint

12

tôi đề nghị bạn sử dụng moment.jscho điều này. Trong moment.js, bạn có thể:

var localTime = moment().format('YYYY-MM-DD'); // store localTime
var proposedDate = localTime + "T00:00:00.000Z";

bây giờ bạn có định dạng phù hợp cho một thời gian, hãy phân tích cú pháp nó nếu nó hợp lệ:

var isValidDate = moment(proposedDate).isValid();
// returns true if valid and false if it is not.

và để có được phần thời gian, bạn có thể làm một số việc như:

var momentDate = moment(proposedDate)
var hour = momentDate.hours();
var minutes = momentDate.minutes();
var seconds = momentDate.seconds();

// or you can use `.format`:
console.log(momentDate.format("YYYY-MM-DD hh:mm:ss A Z"));

Thông tin thêm về momentjs http://momentjs.com/


2
Bạn sẽ có thể phân tích cú pháp này trực tiếp trong hàm tạo thời điểm với một chuỗi định dạng thích hợp. (thời điểm sẽ giả sử ngày hiện tại nếu nó không phải là một phần của giá trị.) Ngoài ra, bạn có thể cân nhắc moment.utc(...)để giá trị kết quả nằm trong cùng vùng UTC với giá trị ban đầu.
Matt Johnson-Pint

3

Như một người có thể đã đề xuất,

Tôi đã chuyển trực tiếp chuỗi ngày ISO 8601 đến thời điểm như vậy ...

`moment.utc('2019-11-03T05:00:00.000Z').format('MM/DD/YYYY')`

hoặc là

`moment('2019-11-03T05:00:00.000Z').utc().format('MM/DD/YYYY')`

một trong hai giải pháp này sẽ cho bạn kết quả tương tự.

`console.log(moment('2019-11-03T05:00:00.000Z').utc().format('MM/DD/YYYY')) // 11/3/2019`

Sẽ rất tốt nếu bạn cũng liên kết và giới thiệu việc sử dụng thư viện javascript moment.js một cách rõ ràng trong khi giải thích đoạn mã ở trên.
VKen

Điều này không cung cấp câu trả lời cho câu hỏi. Khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào ; thay vào đó, cung cấp câu trả lời không yêu cầu người hỏi làm rõ . - Từ đánh giá
Phil Tune

@PhilTune, bạn nói đúng, tôi nghĩ não của tôi hoạt động rất nhanh nên về mặt kỹ thuật, tôi đang trả lời bình luận chứ không phải câu hỏi
that_developer 5/11/19

1

Vui lòng sử dụng DateTimeFormatter ISO_DATE_TIME = DateTimeFormatter.ISO_DATE_TIME; thay vì DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss")hoặc bất kỳ mẫu nào

Điều này đã khắc phục sự cố của tôi Dưới đây

java.time.format.DateTimeParseException: Không thể phân tích cú pháp văn bản '2019-12-18T19: 00: 00.000Z' ở chỉ mục 10


Nó đã giải quyết vấn đề của tôi với thời gian chuyển đổi từ loại chuỗi sang OffsetDateTime
RSH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.