Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript将时间字符串设置为日期对象_Javascript_Time - Fatal编程技术网

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();