Javascript将时间字符串设置为日期对象
请参阅下面的代码Javascript将时间字符串设置为日期对象,javascript,time,Javascript,Time,请参阅下面的代码 var d = new Date(); var s = "01.00 AM"; d.setTime(s); 我知道这个密码是错的。请告诉我设置时间的正确方法。我手里有12小时的字符串时间 时间会有所不同。不知道什么时候会更早。而且是12小时的时间。因此将是上午或下午您可以使用正则表达式解析时间,并相应地设置小时和分钟: 编辑1: 正如jaisonDavis指出的,原来的代码在12.XX的AM或PM中不起作用,这是一个疏忽,因为我自己从来没有使用12小时格式,认为它从00.0
var d = new Date();
var s = "01.00 AM";
d.setTime(s);
我知道这个密码是错的。请告诉我设置时间的正确方法。我手里有12小时的字符串时间
时间会有所不同。不知道什么时候会更早。而且是12小时的时间。因此将是上午或下午您可以使用正则表达式解析时间,并相应地设置小时和分钟: 编辑1: 正如jaisonDavis指出的,原来的代码在12.XX的AM或PM中不起作用,这是一个疏忽,因为我自己从来没有使用12小时格式,认为它从00.00开始是错误的 下面可以看到处理这些情况的更正代码:
var测试、部件、小时、分钟、日期、,
d=(新日期()).getTime(),
测试=['01.25 PM'、'11.35 PM'、'12.45 PM'、'01.25 AM'、'11.35 AM'、'12.45 AM'],
i=测试长度,
timeReg=/(\d+)\(\d+)(\w+)/;
对于(;i-->0;){
试验=试验[i];
零件=测试。匹配(计时器);
小时数=/am/i.test(第[3]部分)?
函数(am){returnam<12?am:0}(parseInt(parts[1],10)):
函数(pm){returnpm<12?pm+12:12}(parseInt(parts[1],10]);
分钟=parseInt(第[2]部分和第10部分);
日期=新日期(d);
日期:设定时间(小时);
日期。设置分钟(分钟);
console.log(test+'=>'+日期);
}
函数getCurrentDate(){
var lDate=新日期();
var lDay=lDate.getDate();
var lMonth=lDate.getMonth()+1;
var lYear=lDate.getFullYear();
如果(lDay<10){
lDay='0'+lDay
}
如果(第1个月<10个月){
第1个月='0'+第1个月
}
mCurrentDate=lYear+“-”+lMonth+“-”+lDay+“T00:00:00+05:30”;
}
我来晚了,但我想我应该分享一个不使用正则表达式的功能:
function setDateTime(date, time) {
var index = time.indexOf("."); // replace with ":" for differently displayed time.
var index2 = time.indexOf(" ");
var hours = time.substring(0, index);
var minutes = time.substring(index + 1, index2);
var mer = time.substring(index2 + 1, time.length);
if (mer == "PM"){
hours = hours + 12;
}
date.setHours(hours);
date.setMinutes(minutes);
date.setSeconds("00");
return date;
}
我对@thebreiflab接受的答案添加了一些改进,以适合我的用例,并认为我会与大家分享 如果正则表达式更改为
timeReg=/(\d+)[\.\124;:](\ d+)\s?(\w+)/代码>,,
它将处理其他一些常见的情况
即:
- 在小时和分钟之间使用冒号而不是小数点
- 允许am/pm立即跟随时间而没有空间
另外,将秒数设置为0(因为这是我的主要用例)
由此产生的代码将是:
var test, parts, hours, minutes, date,
d = (new Date()).getTime(),
tests = ['01.25 PM', '01:25pm', '1:25 PM', '11.35 PM', '12.45 PM', '01.25 AM', '11.35 AM', '12.45 AM'],
i = tests.length,
timeReg = /(\d+)[\.|:](\d+)\s?(\w+)/;
for(; i-- > 0;) {
test = tests[i];
parts = test.match(timeReg);
hours = /am/i.test(parts[3]) ?
function(am) {return am < 12 ? am : 0}(parseInt(parts[1], 10)) :
function(pm) {return pm < 12 ? pm + 12 : 12}(parseInt(parts[1], 10));
minutes = parseInt(parts[2], 10);
date = new Date(d);
date.setHours(hours);
date.setMinutes(minutes);
date.setSeconds(0);
console.log(test + ' => ' + date);
}
var测试、部件、小时、分钟、日期、,
d=(新日期()).getTime(),
测试=['01.25 PM','01:25 PM','1:25 PM','11.35 PM','12.45 PM','01.25 AM','11.35 AM','12.45 AM'],
i=测试长度,
timeReg=/(\d+)[\.\124;:](\ d+)\s?(\w+)/;
对于(;i-->0;){
试验=试验[i];
零件=测试。匹配(计时器);
小时数=/am/i.test(第[3]部分)?
函数(am){returnam<12?am:0}(parseInt(parts[1],10)):
函数(pm){returnpm<12?pm+12:12}(parseInt(parts[1],10]);
分钟=parseInt(第[2]部分和第10部分);
日期=新日期(d);
日期:设定时间(小时);
日期。设置分钟(分钟);
日期。设置秒(0);
console.log(test+'=>'+日期);
}
使用将是最好的解决方案
const fullDate = new Date();
// fullDate = Tue Dec 12 2017 11:18:30 GMT+0530 (IST) {}
const time = '01.00 AM';
const d = moment(fullDate).format('L'); // d = "12/12/2017"
const date = moment(d +' '+ time).format();
// date = "2017-12-12T01:00:00+05:30"
如果您想将时刻日期转换为js日期
const jsDate = moment(date).toDate();
如果时间在下午12点到12点59分之间,则时间仍会增加12小时,即时间为12。**AM@jaisonDavis你说得对,谢谢你的关注,我自己并没有使用12小时制。我在原来的答复中增加了一项内容,处理这些案件。当我将来使用12小时格式时,我一定会记住12.XX:-)这真的帮了我的忙,这正是我想要的。。非常感谢。
const fullDate = new Date();
// fullDate = Tue Dec 12 2017 11:18:30 GMT+0530 (IST) {}
const time = '01.00 AM';
const d = moment(fullDate).format('L'); // d = "12/12/2017"
const date = moment(d +' '+ time).format();
// date = "2017-12-12T01:00:00+05:30"
const jsDate = moment(date).toDate();