Преобразование времени 24 часа в 12 часов с AM и PM с использованием Javascript - PullRequest
55 голосов
/ 04 февраля 2011

Каков наилучший способ преобразования следующего возвращаемого значения JSON из 24-часового формата в 12-часовой формат с AM и PM?Дата должна оставаться неизменной - время - единственное, что требует форматирования.

February 04, 2011 19:00:00

PS Использование jQuery, если это облегчает задачуТакже предпочел бы простую функцию / код и не использовать Date.js.

Ответы [ 23 ]

0 голосов
/ 31 марта 2012

Вот, пожалуйста,

var myDate = new Date("February 04, 2011 19:00:00");
var hr = myDate.getHours(); 
var convHrs = "";
var ampmSwitch = "";
ampmSwitch = (hr > 12)? "PM":"AM"; 
convHrs = (hr >12)? hr-12:hr;
// Build back the Date / time using getMonth/ getFullYear and getDate and other functions on the myDate object. Enclose it inside a func and there you got the working 12 hrs converter ;)

А вот и конвертер func для yas;) Счастливого кодирования !!

function convertTo12Hrs(yourDateTime){
    var myDate = new Date(yourDateTime);
    var dtObject = new Object();
    var monthsCollection = {0:"January", 1:"February",2:"March",3:"April",4:"May",5:"June",6:"July",7:"August",8:"September",9:"October",10:"November",11:"December"};
    dtObject.year = myDate.getFullYear();
    dtObject.month = monthsCollection[myDate.getMonth()];
    dtObject.day = (myDate.getDate()<10)?"0"+myDate.getDate():myDate.getDate();
    dtObject.minutes = (myDate.getMinutes() < 10)? "0"+myDate.getMinutes():myDate.getMinutes();
    dtObject.seconds = (myDate.getSeconds() < 10)? "0"+myDate.getSeconds():myDate.getSeconds();
    // Check if hours are greater than 12? Its PM
    dtObject.ampmSwitch = (myDate.getHours() > 12)? "PM":"AM";
    // Convert the hours
    dtObject.hour = (myDate.getHours() > 12)?myDate.getHours()-12:myDate.getHours();
    // Add the 0 as prefix if its less than 10
    dtObject.hour = (dtObject.hour < 10)? "0"+dtObject.hour:dtObject.hour;

    // Format back the string as it was or return the dtObject object or however you like. I am returning the object here
    return dtObject;
}

вызовите его как convertTo12Hrs ("04 февраля 2011 г. 19:00: 00" );он вернет вам объект, который, в свою очередь, вы можете использовать для форматирования обратно строки даты и времени, как вам захочется ...

0 голосов
/ 12 мая 2012

В конце концов, вы все равно будете много манипулировать строками, так почему бы просто не манипулировать самой строкой даты?

Браузеры по-разному форматируют строку даты.

Netscape ::: Пт, 11 мая 2012 20:15:49 GMT-0600 (горное дневное время)

IE ::: Пт 11 мая 20:17:33 MDT 2012

так что вам придется проверить это.

var D = new Date().toString().split(' ')[(document.all)?3:4];

Это установит D равным 24-часовой строке ЧЧ: ММ: СС. Разделить это на двоеточия, и первым элементом будут часы.

var H = new Date().toString().split(' ')[(document.all)?3:4].split(':')[0];

Вы можете конвертировать 24-часовые часы в 12-часовые, но это не на самом деле было упомянуто здесь. Наверное, потому что это довольно сумасшедший что вы на самом деле делаете математически, когда вы переводите часы из часов. На самом деле, то, что вы делаете, добавляет 23, модифицируя это на 12 и добавление 1

twelveHour = ((twentyfourHour+23)%12)+1;

Так, например, вы можете получить все время из строки даты, мод часы, и отображать все это с новыми часами.

var T = new Date().toString().split(' ')[(document.all)?3:4].split(':');
T[0] = (((T[0])+23)%12)+1;
alert(T.join(':'));

С помощью некоторого умного регулярного выражения вы, вероятно, можете отключить часы в формате ЧЧ: ММ: СС. часть строки даты, и мод их все в одной строке. Это было бы смешная строка, потому что обратная ссылка $ 1 не может быть использована в расчеты без помещения функции в замену.

Вот как это будет выглядеть:

var T = new Date().toString().split(' ')[(document.all)?3:4].replace(/(^\d\d)/,function(){return ((parseInt(RegExp.$1)+23)%12)+1} );

Что, как я говорю, смешно. Если вы используете библиотеку, которая может выполнять В расчетах по обратным ссылкам строка становится:

var T = new Date().toString().split(' ')[(document.all)?3:4].replace(/(^\d\d)/, (($1+23)%12)+1);

И это на самом деле не может быть и речи как полезного кода, если вы хорошо это документируете. Эта строка говорит:

Создайте строку даты, разбейте ее на пробелы, получите браузерную часть, и замените первое двузначное число на это измененное число.

Суть истории в том, что способ преобразования 24-часовых часов в 12-часовые часы это неочевидный математический расчет:

Вы добавляете 23, мод на 12, затем добавляете еще один.

0 голосов
/ 19 марта 2013

Вот хорошая маленькая функция, которая работала для меня.

function getDisplayDatetime() {
    var d = new Date(); var hh = d.getHours(); var mm = d.getMinutes(); var dd = "AM"; var h = hh;

    if (mm.toString().length == 1) {
        mm = "0" + mm;
    }

    if (h >= 12) {
        h = hh - 12;
        dd = "PM";
    }

    if (h == 0) {
        h = 12;
    }
    var Datetime = "Datetime: " + d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getUTCDate() + " " + h + ":" + mm;
    return Datetime + " " + dd;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...