69

jqueryを使用して12時間hh:mm AM / PMを24時間hh:mmに変換する簡単な方法はありますか?

注:他のライブラリは使用しないでください。

var time = $("#starttime").val()hh:mm AM/PMを返すがあります。

4

35 に答える 35

100

これを試して

var time = $("#starttime").val();
var hours = Number(time.match(/^(\d+)/)[1]);
var minutes = Number(time.match(/:(\d+)/)[1]);
var AMPM = time.match(/\s(.*)$/)[1];
if(AMPM == "PM" && hours<12) hours = hours+12;
if(AMPM == "AM" && hours==12) hours = hours-12;
var sHours = hours.toString();
var sMinutes = minutes.toString();
if(hours<10) sHours = "0" + sHours;
if(minutes<10) sMinutes = "0" + sMinutes;
alert(sHours + ":" + sMinutes);
于 2013-02-26T07:43:40.350 に答える
21

これは役立ちます:

 function getTwentyFourHourTime(amPmString) { 
        var d = new Date("1/1/2013 " + amPmString); 
        return d.getHours() + ':' + d.getMinutes(); 
    }

例 :

getTwentyFourHourTime("8:45 PM"); // "20:45"
getTwentyFourHourTime("8:45 AM"); // "8:45"

更新: 注:「時間」と「午前/午後」の間にタイムストリング用のスペースが必要です。

于 2016-05-10T04:27:58.570 に答える
4

ライブラリをお勧めする必要があります:瞬間

コード:

var target12 = '2016-12-08 9:32:45 PM';
console.log(moment(target12, 'YYYY-MM-DD h:m:s A').format('YYYY-MM-DD HH:mm:ss'));
于 2016-12-09T02:17:30.523 に答える
2

プロジェクトにこの機能が必要でした。私は devnull69 を試しましたが、文字列入力が am/pm セクションに非常に固有であり、検証を変更する必要があったため、いくつかの問題がありました。私は Adrian P. の jsfiddle をいじって、さまざまな日付形式でより適切に機能するように見えるバージョンになりました。ここにフィドルがあります: http://jsfiddle.net/u91q8kmt/2/

関数は次のとおりです。

function ConvertTimeformat(format, str) {
    var hours = Number(str.match(/^(\d+)/)[1]);
    var minutes = Number(str.match(/:(\d+)/)[1]);
    var AMPM = str.match(/\s?([AaPp][Mm]?)$/)[1];
    var pm = ['P', 'p', 'PM', 'pM', 'pm', 'Pm'];
    var am = ['A', 'a', 'AM', 'aM', 'am', 'Am'];
    if (pm.indexOf(AMPM) >= 0 && hours < 12) hours = hours + 12;
    if (am.indexOf(AMPM) >= 0 && hours == 12) hours = hours - 12;
    var sHours = hours.toString();
    var sMinutes = minutes.toString();
    if (hours < 10) sHours = "0" + sHours;
    if (minutes < 10) sMinutes = "0" + sMinutes;
    if (format == '0000') {
        return (sHours + sMinutes);
    } else if (format == '00:00') {
        return (sHours + ":" + sMinutes);
    } else {
        return false;
    }
}
于 2015-02-04T17:11:04.557 に答える
2
function timeConversion(s) {
  var time = s.toLowerCase().split(':');
  var hours = parseInt(time[0]);
  var _ampm = time[2];
  if (_ampm.indexOf('am') != -1 && hours == 12) {
    time[0] = '00';
  }
  if (_ampm.indexOf('pm')  != -1 && hours < 12) {
    time[0] = hours + 12;
  }
  return time.join(':').replace(/(am|pm)/, '');
}

文字列パラメーターを使用して関数を呼び出します。

timeConversion('17:05:45AM')

また

timeConversion('07:05:45PM')
于 2017-07-07T22:21:27.780 に答える
2

これにより、次のことが可能になります: サンプル入力: 07:05:45PM サンプル出力: 19:05:45

function timeConversion(s) {
    let output = '';
    const timeSeparator = ':'
    const timeTokenType = s.substr(s.length - 2 , 2).toLowerCase();
    const timeArr = s.split(timeSeparator).map((timeToken) => {
    const isTimeTokenType = 
          timeToken.toLowerCase().indexOf('am') > 0 ||                                                                                               
           timeToken.toLowerCase().indexOf('pm');
        if(isTimeTokenType){
            return timeToken.substr(0, 2);
        } else {
            return timeToken;
        }
    });
    const hour = timeArr[0];
    const minutes = timeArr[1];
    const seconds = timeArr[2];
    const hourIn24 = (timeTokenType === 'am') ? parseInt(hour) - 12 : 
    parseInt(hour) + 12;
    return hourIn24.toString()+ timeSeparator + minutes + timeSeparator + seconds;
}

気に入っていただければ幸いです。

于 2018-08-18T16:54:54.083 に答える
1

CodeSkill #1の会議に基づく

フォーマットの検証は別の機能でなければなりません:)

  

function convertTimeFrom12To24(timeStr) {
  var colon = timeStr.indexOf(':');
  var hours = timeStr.substr(0, colon),
      minutes = timeStr.substr(colon+1, 2),
      meridian = timeStr.substr(colon+4, 2).toUpperCase();
 
  
  var hoursInt = parseInt(hours, 10),
      offset = meridian == 'PM' ? 12 : 0;
  
  if (hoursInt === 12) {
    hoursInt = offset;
  } else {
    hoursInt += offset;
  }
  return hoursInt + ":" + minutes;
}
console.log(convertTimeFrom12To24("12:00 AM"));
console.log(convertTimeFrom12To24("12:00 PM"));
console.log(convertTimeFrom12To24("11:00 AM"));
console.log(convertTimeFrom12To24("01:00 AM"));
console.log(convertTimeFrom12To24("01:00 PM"));

于 2016-10-28T13:52:39.810 に答える
1

@krzysztof answer の拡張バージョンで、時間と修飾子の間にスペースがあるかどうかに関係なく時間通りに作業できます。

const convertTime12to24 = (time12h) => {
      const [fullMatch, time, modifier] = time12h.match(/(\d?\d:\d\d)\s*(\w{2})/i);

      let [hours, minutes] = time.split(':');

      if (hours === '12') {
        hours = '00';
      }

      if (modifier === 'PM') {
        hours = parseInt(hours, 10) + 12;
      }

      return `${hours}:${minutes}`;
    }

    console.log(convertTime12to24('01:02 PM'));
    console.log(convertTime12to24('05:06 PM'));
    console.log(convertTime12to24('12:00 PM'));
    console.log(convertTime12to24('12:00 AM'));
于 2020-02-25T13:08:59.477 に答える
0
function convertTo24Hour(time) {
    time = time.toUpperCase();
    var hours = parseInt(time.substr(0, 2));
    if(time.indexOf('AM') != -1 && hours == 12) {
        time = time.replace('12', '0');
    }
    if(time.indexOf('PM')  != -1 && hours < 12) {
        time = time.replace(hours, (hours + 12));
    }
    return time.replace(/(AM|PM)/, '');
}
于 2016-07-30T03:08:07.747 に答える
0

@devnull69 が提出したスクリプトを少し修正しました。私のアプリケーションでは、可能な値を返し、変数として使用する関数の方が便利だと感じました。

HTML

<input type="text" id="time_field" />
<button>Submit</submit>

jQuery

$(document).ready(function() {

    function convertTime(time) {

        var hours = Number(time.match(/^(\d\d?)/)[1]);
        var minutes = Number(time.match(/:(\d\d?)/)[1]);
        var AMPM = time.match(/\s(AM|PM)$/i)[1];

        if((AMPM == 'PM' || AMPM == 'pm') && hours < 12) {
            hours = hours + 12;
        }
        else if((AMPM == 'AM' || AMPM == "am") && hours == 12) {
            hours = hours - 12;
        }

        var sHours = hours.toString();
        var sMinutes = minutes.toString();

        if(hours < 10) {
            sHours = "0" + sHours;
        }
        else if(minutes < 10) {
             sMinutes = "0" + sMinutes;
        }

        return sHours + ":" + sMinutes;

    }

    $('button').click(function() {
        alert(convertTime($('#time_field').val()));
    });

});
于 2015-01-29T03:21:05.293 に答える
0
date --date="2:00:01 PM" +%T
14:00:01

date --date="2:00 PM" +%T | cut -d':' -f1-2
14:00

var="2:00:02 PM"
date --date="$var" +%T
14:00:02
于 2016-10-09T19:02:06.257 に答える
0
dateFormat.masks.armyTime= 'HH:MM';

now.format("armyTime");
于 2016-07-21T20:18:14.240 に答える
0

HackerRank でこの問題を解決したので、ここで結果を共有します

function timeConversion(s) {
    const isPM = s.indexOf('PM') !== -1;
    let [hours, minutes, seconds] = s.replace(isPM ? 'PM':'AM', '').split(':');

    if (isPM) {
        hours = parseInt(hours, 10) + 12;
        hours = hours === 24 ? 12 : hours;
    } else {
        hours = parseInt(hours, 10);
        hours = hours === 12 ? 0 : hours;
        if (String(hours).length === 1) hours = '0' + hours;
    }

    const time = [hours, minutes, seconds].join(':');

    return time;
}

これは、 のような入力に対して機能し06:40:03AMます。

于 2020-01-07T17:30:49.837 に答える