Ai đó có thể giải thích loại định dạng này bằng javascript được không
T00:00:00.000Z
Và làm thế nào để phân tích cú pháp nó?
Ai đó có thể giải thích loại định dạng này bằng javascript được không
T00:00:00.000Z
Và làm thế nào để phân tích cú pháp nó?
T
có nghĩa là "thời gian", và thường tách ngày khỏi thành phần thời gian. Z
có nghĩa là giá trị theo UTC
Câu trả lời:
Đó 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 Date
lỗ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());
getUTCHours
, getUTCMinutes
và getUTCSeconds
. 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.
tôi đề nghị bạn sử dụng moment.js
cho đ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/
moment.utc(...)
để giá trị kết quả nằm trong cùng vùng UTC với giá trị ban đầu.
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`
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