什么是从格式化为这样的时间字符串减去了几个小时的最佳方式:如何从Javascript中的HH:MM AM时间字符串中减去小时数?
8:32 AM
我想过分裂在结肠的字符串,但来自比如说减去3而小时的时候,1:00 AM我得到-2:00 AM而不是所需的晚上10:00。
什么是从格式化为这样的时间字符串减去了几个小时的最佳方式:如何从Javascript中的HH:MM AM时间字符串中减去小时数?
8:32 AM
我想过分裂在结肠的字符串,但来自比如说减去3而小时的时候,1:00 AM我得到-2:00 AM而不是所需的晚上10:00。
最可靠的方法是将其转换成一个JS日期对象,然后做你的数学上
var olddate = new Date(2011, 6, 15, 8, 32, 0, 0); // create a date of Jun 15/2011, 8:32:00am
var subbed = new Date(olddate - 3*60*60*1000); // subtract 3 hours
var newtime = subbed.getHours() + ':' + subbed.getMinutes();
Date对象可以接受年/月/日/时/分/秒/毫秒OR构造函数的1970年1月1日以来的毫秒时间的unix样式时间戳。
您可以使用的代码,和平:
var T1=new Date("September 5, 2005 8:10:00");
var T2=new Date("September 5, 2005 13:35:00");
var diff=new Date();
diff.setTime(T2-T1);
alert(diff.getHours()+":"+diff.getMinutes())
希望这有助于..
它的错误!,这段代码的结果是2:25,这个时间的差别真的是:13小时25分钟 - 8小时10分钟= 5小时15分钟 – chespinoza 2013-01-04 17:27:27
您可以尝试像DateJs一个jQuery库。下面是从该链接显示一些例子:
// Number fun
(3).days().ago();
// Convert text into Date
Date.parse('today');
Date.parse('t + 5 d'); // today + 5 days
Date.parse('next thursday');
Date.parse('February 20th 1973');
Date.parse('Thu, 1 July 2004 22:30:00');
Date.js不是“一个jQuery库” ,上面没有回答这个问题。 – RobG 2011-06-16 00:12:39
最难的部分是在分析你的时间 - 我刚刚加入2009年1月1日至解析方法的开始,以便它解析好听而你不知道不需要写你自己的。 (并不是很难)。将下面的代码折叠成几行 - 展开显示步骤。
<html>
<head>
<script type="text/javascript">
function calculateTime(stringTime) {
var hoursToSubtract = 1;
var oldTime = Date.parse('Jan 1, 2009 ' + stringTime);
var newTime = new Date(oldTime - 1000 * 60 * 60 * hoursToSubtract);
var hours = newTime.getHours();
var minutes = newTime.getMinutes();
var designation = "PM";
if ((hours == 0 || hours == 24) && minutes == 0)
designation = 'MIDNIGHT';
else if (hours == 12 && minutes == 0)
designation = 'NOON'
else if (hours < 12)
designation = 'AM';
else
hours -= 12;
document.write('new time = ' + hours + ':' + minutes + ' ' + designation);
}
</script>
</head>
<body>
<script type="text/javascript">
calculateTime('8:30 AM');
calculateTime('8:30 PM');
calculateTime('12:10 PM');
</script>
</body>
</html>
很多在正确的轨道上的答案,一个更多的考虑:
// Assumes timeString is hh:mm am/pm
function addHours(timeString, h) {
var t = timeString.match(/\d+/g);
var am = /am$/.test(timeString);
var d = new Date();
d.setHours(+t[0] + (am? 0 : 12) + +h, +t[1]);
return formatTime(d.getHours() + ':' + d.getMinutes());
}
function formatTime(t) {
function addZ(n) {
return n<10? '0'+n : ''+n;
}
var t = t.split(':');
var m = (t[0] > 12)? 'pm' : 'am';
return addZ(t[0]%12 || t[0]) + ':' + addZ(t[1]) + ' ' + m;
}
alert(addHours('12:15 am', -13)); // 11:15 pm
如果你只是想只有时间玩,我认为下面会为你很容易:
var timeStr = '1:30 PM'
var parts = timeStr.split(':');
var hour = parseInt($.trim(parts[0]));
hour -= 3;
if(hour <= 0){
// easily flip it by adding 12
hour += 12;
// swap am & pm
if(parts[1].match(/(AM|am)/)){
parts[1] = parts[1].replace('AM', 'PM').replace('am', 'pm')
// keep the case
} else {
parts[1] = parts[1].replace('PM', 'AM').replace('pm', 'am')
}
}
// final answer
timeStr = hour + ':' + parts[1];
当从1中减去3时,返回一个负数。 – 2011-06-16 01:24:28
我的结果:“10:30 AM” 如果小时<0,则会加上12,以确保小时不是负数。 – 2011-06-16 01:27:15
moment("8:32 AM", 'h:mm A').subtract('hours', 2).format('h:mm A')
我能够从别的东西生成一个独特的时间戳,所以这工作得很好!虽然我也必须在'00'分钟和'如果(小时> 12){小时=小时-12}'以及AM/PM类似的情况下进行'0'分钟。 – 2011-06-16 01:22:56