2013-04-18 23 views
10

Cân nhắc HTML mã sau + Javascript:Issue với .toISOString() chức năng

<!DOCTYPE html> 
<html> 
<body> 

<p id="demo">Click the button to display a date after changing the hours, minutes, and seconds.</p> 

<button onclick="myFunction()">Try it</button> 
<script> 
function myFunction() 
    { 
    var d = new Date(); 
    d.setHours(0,0,0,0); 
    document.write(d + '<br/>'); 
    document.write('ISO Date '+ d.toISOString() + '<br/>'); 
    //I want it to be 2013-04-17T00:00:00.000Z 
    } 
</script> 
</body> 
</html> 

Output:

Thu Apr 18 2013 00:00:00 GMT+0530 (India Standard Time) 
ISO Date 2013-04-17T18:30:00.000Z 

bất cứ ai có thể giúp vào việc tìm hiểu sự khác biệt này trong ngày & Time

Trả lời

25
var d = new Date(); 
d.setHours(-12, d.getTimezoneOffset(), 0, 0); //removing the timezone offset and 12 hours 
console.log(d.toISOString()); //2013-04-17T00:00:00.000Z 

Tôi không biết, tại sao bạn sẽ cần một ngày theo tiêu chuẩn ISO một ngày trước đó, nhưng trong trường hợp nó là một typo:

var d = new Date(); 
d.setHours(0, -d.getTimezoneOffset(), 0, 0); //removing the timezone offset. 
console.log(d.toISOString()); //2013-04-18T00:00:00.000Z 
+0

Trong ví dụ thứ hai, tôi tin rằng nó phải là 'd.getTimezoneOffset()'. Mức chênh lệch có thể là số âm hoặc dương. Phủ định sẽ tạo thêm nếu giá trị là số âm. – dbasch

+0

@dbasch thats điểm. Nếu giá trị là số âm, khi đó bạn ở phía sau ** UTC0, vì vậy bạn cần phải thêm giờ vào giờ địa phương của mình. –

3
2013-18-04 00:00:00 GMT+0530 
2013-17-04 18:30:00 GMT+0000 

Đây là hai dấu thời gian. Người đầu tiên có múi giờ, múi giờ thứ hai là GMT (không điều chỉnh múi giờ). Nếu bạn lấy dấu thời gian thứ hai và thêm 05:30:00 vào 18:30:00 bạn nhận được nửa đêm của ngày hôm sau. Điều đó khớp với dấu thời gian đầu tiên.

+1

Đáng chú ý khi nhận xét trong mã OP: '// Tôi muốn nó là 2013-04-17T00: 00: 00.000Z'. Tôi nghĩ anh ta đang tìm cách ngăn chặn '.toISOString()' chuyển đổi từ GMT + 0530 thành GMT + 0000. –

+0

@JamesDonnelly: Bạn nói đúng ... Tôi đã nhận được câu trả lời từ Artyom Neustroev, tức là xóa bỏ khoảng thời gian bù đắp múi giờ. bất kỳ cách nào nhờ vào mọi người trong thời gian của bạn –

+0

Hậu tố "GMT" đó không phải là múi giờ, mà là bù đắp. Họ không cho bạn biết gì về điều chỉnh thời gian tiết kiệm ánh sáng ban ngày. – Suncat2000

1

Ngoài ra bạn có thể xóa múi giờ như thế này:

let birthday = new Date(this.profile.birthday + ' UTC').toISOString();