将军事时间转换为上午和下午时间的最佳方式是什么? 。 我有以下代码,它工作正常:
$scope.convertTimeAMPM = function(time){
//var time = "12:23:39";
var time = time.split(':');
var hours = time[0];
var minutes = time[1];
var seconds = time[2];
$scope.timeValue = "" + ((hours >12) ? hours -12 :hours);
$scope.timeValue += (minutes < 10) ? ":0" : ":" + minutes;
$scope.timeValue += (seconds < 10) ? ":0" : ":" + seconds;
$scope.timeValue += (hours >= 12) ? " P.M." : " A.M.";
//console.log( timeValue);
}
但是当我运行程序时,我对输出节目不满意。 。
示例输出:
20:00:00 8:0:0 P.M.
08:00:00 08:0:0 A.M
16:00:00 4:30:0 P.M.
我想实现如下所示的输出:
20:00:00 8:00:00 P.M.
08:00:00 8:00:00 A.M
16:30:00 4:30:00 P.M.
那里有什么建议吗?感谢
答案 0 :(得分:9)
您错过了在minutes < 10
和seconds < 10
时连接字符串,因此您无法获得所需的结果。
使用Number()
将字符串转换为数字并正确使用它,如下面的工作代码段所示:
编辑:在声明Number()
,hours
和minutes
时更新了代码以使用seconds
。
var time = "16:30:00"; // your input
time = time.split(':'); // convert to array
// fetch
var hours = Number(time[0]);
var minutes = Number(time[1]);
var seconds = Number(time[2]);
// calculate
var timeValue;
if (hours > 0 && hours <= 12) {
timeValue= "" + hours;
} else if (hours > 12) {
timeValue= "" + (hours - 12);
} else if (hours == 0) {
timeValue= "12";
}
timeValue += (minutes < 10) ? ":0" + minutes : ":" + minutes; // get minutes
timeValue += (seconds < 10) ? ":0" + seconds : ":" + seconds; // get seconds
timeValue += (hours >= 12) ? " P.M." : " A.M."; // get AM/PM
// show
alert(timeValue);
console.log(timeValue);
答案 1 :(得分:7)
正如Nit推荐的那样,Moment.js为您的问题提供了一个简单的解决方案。
function convert(input) {
return moment(input, 'HH:mm:ss').format('h:mm:ss A');
}
console.log(convert('20:00:00'));
console.log(convert('08:00:00'));
console.log(convert('16:30:00'));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.js"></script>
&#13;
答案 2 :(得分:0)
不需要图书馆
这是一个甜蜜的&amp;简单的功能我发誓应该完全符合你的需要
function toStandardTime(militaryTime) {
militaryTime = militaryTime.split(':');
return (militaryTime[0].charAt(0) == 1 && militaryTime[0].charAt(1) > 2) ? (militaryTime[0] - 12) + ':' + militaryTime[1] + ':' + militaryTime[2] + ' P.M.' : militaryTime.join(':') + ' A.M.'
}
console.log(toStandardTime('16:30:00'));
如果需要,还有一个更易阅读的版本
function toStandardTime(militaryTime) {
militaryTime = militaryTime.split(':');
if (militaryTime[0].charAt(0) == 1 && militaryTime[0].charAt(1) > 2) {
return (militaryTime[0] - 12) + ':' + militaryTime[1] + ':' + militaryTime[2] + ' P.M.';
} else {
return militaryTime.join(':') + ' A.M.';
}
}
console.log(toStandardTime('16:30:00'));
答案 3 :(得分:0)
使用ES6的紧凑方法如下:
$query = DB::table('mgl_report_targets')
->select('id', 'month', 'meeting_start_date', 'call_start_date')
->whereRaw("extract(month from to_date(mgl_report_targets.month, '%Month-%YYYY')) in (extract(month from meeting_start_date), extract(month from call_start_date))");
$results = $query->get();
$sql = $query->toSql();
答案 4 :(得分:0)
const parseMillitaryTime = (time: string) =>
pipe(
time,
s => s.split(':'),
time_ =>
`${((Number(time_[0]) + 11) % 12) + 1}:${
Number(time_[1]) < 10 ? `0${Number(time_[1])}` : `${Number(time_[1])}`
} ${Number(time_[0]) > 11 ? 'pm' : 'am'}`
)
答案 5 :(得分:0)
作为 Huy Hoang Pham 回答的扩展,这里是使用 Luxon 而不是 moment.js 的代码(参见 this 和 this)
import { DateTime } from "luxon";
function convert(input) {
return DateTime.fromFormat(input, 'HH:mm:ss').toFormat('h:mm:ss A');
}
console.log(convert('20:00:00'));
console.log(convert('08:00:00'));
console.log(convert('16:30:00'));
时间很复杂,我建议在您自己的代码上使用库来进行这样的转换。