Javascript将时间字符串设置为日期对象

时间:2013-05-05 07:13:44

标签: javascript time

请参阅以下代码;

var d = new Date();
var s = "01.00 AM";
d.setTime(s);

我知道这段代码错了。请给我正确的设置时间的方法。我手里有12小时的字符串格式。

时间会有所不同。不知道早些时候会是什么时候。也是12小时的时间。所以它将是AM或PM

5 个答案:

答案 0 :(得分:19)

您可以使用正则表达式解析时间,并相应地设置小时和分钟:

http://jsfiddle.net/54VkC/1/

var d = new Date(),
    s = "01.25 PM",
    parts = s.match(/(\d+)\.(\d+) (\w+)/),
    hours = /am/i.test(parts[3]) ? parseInt(parts[1], 10) : parseInt(parts[1], 10) + 12,
    minutes = parseInt(parts[2], 10);

d.setHours(hours);
d.setMinutes(minutes);

alert(d);

编辑1: 正如jaisonDavis指出的那样,原始代码不适用于12.XX的AM或PM,这是一个疏忽,因为我自己从不使用12小时格式,认为它从00.00开始是错误的。

可以在此处看到处理这些情况的更正代码:

http://jsfiddle.net/54VkC/93/

var test, parts, hours, minutes, date,
    d = (new Date()).getTime(),
    tests = ['01.25 PM', '11.35 PM', '12.45 PM', '01.25 AM', '11.35 AM', '12.45 AM'],
    i = tests.length,
    timeReg = /(\d+)\.(\d+) (\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);
    
    console.log(test + ' => ' + date);
}

答案 1 :(得分:9)

我很晚才参加聚会,但我认为我分享的功能并没有使用正则表达式:

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;
}

答案 2 :(得分:1)

function getCurrentDate() {
    var lDate = new Date();
    var lDay = lDate.getDate();
    var lMonth = lDate.getMonth() + 1;
    var lYear = lDate.getFullYear();

    if (lDay < 10) {
        lDay = '0' + lDay
    }

    if (lMonth < 10) {
        lMonth = '0' + lMonth
    }
    mCurrentDate = lYear + "-" + lMonth + "-" + lDay + "T00:00:00+05:30";
}

答案 3 :(得分:0)

我添加了一些内容作为对@thebreiflabb接受的答案的改进,以适应我的用例并认为我会分享。

如果正则表达式更改为timeReg = /(\d+)[\.|:](\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);
}

答案 4 :(得分:0)

使用moment.js将是最佳解决方案。

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