2011-12-28 36 views
5

Tôi đang lấy dữ liệu JSON từ url. Thời gian là thời gian quân sự và tôi đã tự hỏi nếu có một cách một khi tôi lấy về phía khách hàng để chuyển nó sang thời gian tiêu chuẩn.Gỡ rối JSON - Chuyển đổi thời gian quân sự thành thời gian chuẩn qua Javascript

Đây là JSON:

[ 
    { 
    SaturdayClose: "21:00", 
    SaturdayOpen: "10:00", 
    SundayClose: "12:00", 
    SundayOpen: "18:00", 
    WeekdayClose: "21:00", 
    WeekdayOpen: "10:00" 
    } 
] 

Đây là index.html của tôi:

<p> 
     Sun: ${ SundayOpen }a - ${ SundayClose }p Mon - Sat: ${ SaturdayOpen }a ${ SaturdayClose }p 
    </p> 

này trả về kiểu này xấu xa:

Sun: 18: 00a - 12: 00p Thứ Hai - Thứ Bảy: 10: 00a 21: 00p

Tôi muốn trả lại điều này:

Mặt trời: 6: 00a - 12: p Thứ Hai - Thứ Bảy: 10: 00a - 9: 00p

+0

tìm kiếm google cho ngày định dạng js thay vì sau đó chuyển đổi ;-) –

+0

khi tôi tìm kiếm kết quả của mình chủ yếu là để làm với C#. Điều này chỉ có thể ở phía máy chủ? Nếu bạn có một liên kết xin vui lòng bắn nó. Cảm ơn. –

+0

xin lỗi một giải pháp js có thể là [this] (http://stackoverflow.com/a/8622009/1114171) hoặc [this] (http://stackoverflow.com/a/1056730/1114171) –

Trả lời

1

Hãy xem date.js. Nó có đầy đủ các chức năng chuyển đổi ngày tiện dụng.

+3

Hoàn toàn quá mức cần thiết – mplungjan

+0

Tôi đoán jquery là "hoàn toàn quá mức cần thiết" trừ khi ai đó sẽ viết mã cho bạn. –

+0

Yup. Xem câu trả lời của tôi. Bạn không thể làm điều đó nhỏ hơn với jQuery hay date.js – mplungjan

1

DEMO

window.onload=function() { 

    var re=/(\d{2}:\d{2}[ap])/gi 
    var times = document.getElementById('times').innerHTML; 
    var mil = times.match(re); 
    for (var i=0;i<mil.length;i++) { 
    var parts = mil[i].split(":"); 
    var hours = parseInt(parts[0],10); 
    if (hours > 12) parts[0]=hours-=12; 
    else if (hours==0) parts[0]=12 
    times=times.replace(mil[i],parts.join(":")) 
    } 
    document.getElementById('times').innerHTML = times; 
} 
+0

Điều đó không xử lý chính xác nửa đêm: http://jsfiddle.net/ZEAqZ/2/ –

+0

Bây giờ nó có ... – mplungjan

+0

"|" không được sử dụng trong một lớp nhân vật - nó đang được hiểu theo nghĩa đen ngay bây giờ. –

4

Sử dụng một kịch bản ngày sẽ làm việc tất nhiên. Nếu tất cả những gì bạn cần là chuyển đổi từ 24 hour clock thành 12 giờ, bạn có thể chỉ cần trừ thời gian và thêm khoảng thời gian như được chỉ ra.

EDIT

tôi bổ sung thêm hai lần như một thử nghiệm, 00:30, mà nên 12:30 am, và 12:15, mà nên 12:15 pm. Xem chỉnh sửa mới bên dưới.

var times = { 
    SaturdayClose: "21:00", 
    SaturdayOpen: "10:00", 
    SundayClose: "12:00", 
    SundayOpen: "18:00", 
    WeekdayOpen: "10:00", 
    WeekdayClose: "21:00", 
    WeekendOpen: "12:15", 
    WeekendClose: "00:30" 
}; 

console.log(times); 

for (var time in times) { 
    var parts = times[time].split(':'), 
     hour = parts[0], 
     minutes = parts[1]; 

    if (hour > 12) { 
     times[time] = (hour - 12) + ':' + minutes + ' pm'; 
    } else if (hour == 0) { 
     times[time] = 12 + ':' + minutes + ' am'; 
    } else if (hour == 12) { 
     times[time] += ' pm'; 
    } else { 
     times[time] += ' am'; 
    } 
} 

console.log(times); 

http://jsfiddle.net/tqXCL/3/

nào mang lại cho bạn sau khi chuyển đổi:

SaturdayClose "9:00 pm" 
SaturdayOpen "10:00 am"  
SundayClose "12:00 pm"  
SundayOpen "6:00 pm" 
WeekdayClose "9:00 pm" 
WeekdayOpen "10:00 am"  
WeekendClose "12:30 am"  
WeekendOpen "12:15 pm" 
0

"thời gian quân sự" (hay còn gọi là 24 giờ thời gian) có thể dễ dàng chuyển đổi thành giờ 12 giờ qua một modulo đơn giản 12.

JSFiddle example:

var obj = { 
    SaturdayClose: "21:00", 
    SaturdayOpen: "10:00", 
    SundayClose: "12:00", 
    SundayOpen: "18:00", 
    WeekdayClose: "21:00", 
    WeekdayOpen: "10:00" 
}, prop, $output = $('#output'), time, x, meridiem; 

for (prop in obj) { 
    if (obj.hasOwnProperty(prop)) { 
     x =+obj[prop].substr(0, 2); 

     if (x > 12) { 
      x = x % 12; 
      meridiem = "pm"; 
     } else { 
      meridiem = "am"; 
     } 

     time = x + ":00" + meridiem; 

     $output.append("<li>" + prop + " " + time + "</li>"); 
    } 
} 
+0

Điều đó không xử lý chính xác '00: 30' và '12: 15': http://jsfiddle.net/2qxPa/1/ Bạn cũng không thêm khoảng thời gian, vì vậy nó không rõ ràng khoảng thời gian tham chiếu đến. –

+0

Bắt tốt. Điều đó làm tôi suy nghĩ. Tôi đã cập nhật câu trả lời của mình với một sự điều chỉnh. –

3

Nếu bạn muốn sử dụng html, không phải là json, bạn có thể làm điều này.

dateEl.innerHTML=dateEl.innerHTML.replace(/(\d\d)(:\d\d[ap])/g,function(m,hour,suffix) { 
    return (+hour+11)%12+1+suffix; 
}); 

Lưu ý rằng giả định này bạn đã đặt ngàyEl thành phần tử thích hợp và yếu tố đó không chứa các thời điểm khác mà bạn không muốn chuyển đổi.

+0

cách tiếp cận thú vị ... Một chút quá ngắn gọn để thể hiện một người mới bắt đầu nhưng thông minh. Không xử lý nửa đêm hoặc http://jsfiddle.net/mplungjan/tNLt7/ – mplungjan

+0

Bây giờ tôi cảm thấy như một thằng ngốc - tôi biết nó xử lý 12:00 và giả định nó sẽ làm việc vào nửa đêm khi tôi đọc nhận xét về bài viết của bạn. Cảm ơn bạn đã chỉ ra rằng - cố định (với một ký tự :)). –

+0

Trên thực tế hai ... oops. –

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