2015-08-21 13 views
5

Chức năng này chuyển đổi thời gian để 12hr định dạng, tín dụng cho cộng tác viên trên Stack Overflow cho chức năng này:Làm cách nào để chuyển giá trị của thời gian nhập kiểu cho đối tượng Ngày?

JS

function ampm(date) { 
    var hours = date.getHours(); 
    var minutes = date.getMinutes(); 
    var ampm = hours >= 12 ? 'pm' : 'am'; 
    hours = hours % 12; 
    hours = hours ? hours : 12; // 0 should be 12 
    minutes = minutes < 10 ? '0'+minutes : minutes; // if minutes less than 10, add a 0 in front of it ie: 6:6 -> 6:06 
    var strTime = hours + ':' + minutes + ' ' + ampm; 
    document.getElementById('time').value = strTime; 
    return strTime; 
} 

////This is how the value of the time input is supposed to be displayed in 12 hr format 
_("display_time").innerHTML = ampm(new Date()); 

HTML

<!--This is the input field where a user selects a time--> 
<input id="time" placeholder="Time" type="time" name="time" /> 




<!--This is where the value of the time input is supposed to be displayed in 12 hr format-->> 
<span id="display_time"></span> 

Câu hỏi của tôi là làm thế nào để Tôi nhận được giá trị của trường nhập thời gian được hiển thị trên thẻ span ở định dạng 12hr. Mã này đang hoạt động.

Nó hiển thị thời gian ở định dạng 12hr nhưng chỉ hiển thị thời gian hiện tại. Biểu đồ lưu lượng sẽ giống như, người dùng chọn thời gian đầu vào -> một số JS để chuyển đổi thành định dạng 12hr -> hiển thị dưới dạng định dạng 12hr trong thẻ span. Lời khuyên hay gợi ý nào?

+0

Thành thật mà nói, nó sẽ có vẻ như bạn đang làm phức tạp cuộc sống của bạn. Có rất nhiều câu hỏi stackoverflow liên quan đến thời gian và ngày đối tượng đề xuất các giải pháp đơn giản hơn. Bạn chỉ cần tìm kiếm một chút. – rottenoats

+0

Bạn định cho phép người dùng "chọn thời gian nhập"? Định dạng gì là thời điểm đó (string thời gian? timestamp?) –

+0

Xem này http://stackoverflow.com/questions/4904667/html-how-do-i-insert-dynamic-date-in-webpage – aSoler

Trả lời

1

Không có nhu cầu sử dụng Date và phương pháp của nó đầu vào là một String để bạn sử dụng tốt hơn .split(":") phương pháp và bạn sẽ nhận được các giá trị hoursminutes trực tiếp.

Sau đó chỉ cần kiểm tra xem giá trị của chúng thấp hơn 10 thêm một hàng đầu 0 và nếu hours cao hơn 12 sử dụng pm hậu tố hoặc sử dụng am khác.

Đây là một DEMO sống sử dụng onchange trường hợp thời gian đầu vào với giá trị của nó như là tham số onchange="ampm(this.value):

function ampm(time) { 
 

 
    console.log(time); 
 
    if (time.value !== "") { 
 
    var hours = time.split(":")[0]; 
 
    var minutes = time.split(":")[1]; 
 
    var suffix = hours >= 12 ? "pm" : "am"; 
 
    hours = hours % 12 || 12; 
 
    hours = hours < 10 ? "0" + hours : hours; 
 

 
    var displayTime = hours + ":" + minutes + " " + suffix; 
 
    document.getElementById("display_time").innerHTML = displayTime; 
 
    } 
 
}
<!--This is the input field where a user selects a time--> 
 
<input id="time" placeholder="Time" type="time" name="time" onchange="ampm(this.value)" /> 
 
<span id="display_time"></span>

+0

nào gì '0' có nghĩa là trong giờ var = time.split (":") [0]? Tương tự với '1' trong var phút? –

+0

@ArvinFlores đây là những chỉ số, vì chia cho một mảng kết quả như vậy với '[0]' chúng tôi nhận được yếu tố đầu tiên và '[1]' chúng tôi nhận được một giây. –

+1

Ok. Trong hậu tố var, không nên> = 12 thay vì chỉ> 12? Vì nó sẽ diễn ra từ 11:59 sáng đến 12:00 sáng thay vì 12:00 chiều? –

1

giá trị đầu vào của bạn sẽ là một chuỗi, không phải là một ngày. Tôi đã thiết lập một số jsfiddle nơi tôi đã sửa đổi javascript của bạn để hoạt động trên một chuỗi.

$('#time').on('change', function() { 
    var date = $('#time').val().split(':'); 

    var hours = date[0]; 
    var minutes = date[1]; 

    $('#display_time').text(ampm(hours, minutes)); 
}); 

function ampm(hours, minutes) { 
    var ampm = hours >= 12 ? 'pm' : 'am'; 
    hours = hours % 12 || 12; 
    minutes = minutes || 0; 
    minutes = minutes < 10 ? '0'+minutes : minutes; 
    return hours + ':' + minutes + ' ' + ampm; 
} 
1

Something như thế này sẽ làm điều đó

function showTime() { 
    //Grab the time and split into hrs and mins 
    var time = document.getElementById("time"); 
    if (time.value === "") { 
     document.getElementById("mySpan").innerHTML = ""; 
     return false; 
    } 
    var hrs = time.value.split(":")[0]; 
    var mins = time.value.split(":")[1]; 
    var newTime = ampm(hrs, mins); 
    document.getElementById("mySpan").innerHTML = newTime; 
} 

function ampm(hrs, mins) { 
    return (hrs % 12 || 12) + ":" + mins + ((hrs >= 12) ? "PM" : "AM"); 
} 

Here là một ví dụ. showTime() chỉ cần được chạy khi thay đổi đầu vào thời gian.

+0

@RobG Điều đó sẽ công việc ngoại trừ bạn vẫn cần một tuyên bố riêng biệt cho 12 vì khi nó lớn hơn 12, chúng tôi cần xóa 12 để đại diện cho đồng hồ 12 giờ –

+0

@RobG Tôi đã thực hiện chỉnh sửa. Nó là một chút thanh lịch hơn, nhờ –

+1

'(function (h, m) {return (h% 12 || 12) + ':'? + M + (h <12 'sáng': 'pm')}. Áp dụng ([], '13: 08'.split (': '))) ' – RobG

Các vấn đề liên quan