首页 文章

在JavaScript中将字符串转换为日期

提问于
浏览
463

如何在JavaScript中将字符串转换为日期?

var st = "date in some format"
var dt = new date();

var dt_st= //st in date format same as dt

30 回答

  • 594

    Date.parse 几乎可以得到你想要的东西 . 它在 am / pm 部分窒息,但有一些黑客你可以让它工作:

    var str = 'Sun Apr 25, 2010 3:30pm',
        timestamp;
    
    timestamp = Date.parse(str.replace(/[ap]m$/i, ''));
    
    if(str.match(/pm$/i) >= 0) {
        timestamp += 12 * 60 * 60 * 1000;
    }
    
  • 185

    如果您可以使用极好的moment库(例如在Node.js项目中),您可以使用例如日期轻松解析日期 .

    var momentDate = moment("2014-09-15 09:00:00");
    

    并可以通过访问JS日期对象

    momentDate ().toDate();
    
  • 1

    时间戳应该转换为数字

    var ts = '1471793029764';
    ts = Number(ts); // cast it to a Number
    var date = new Date(ts); // works
    
    var invalidDate = new Date('1471793029764'); // does not work. Invalid Date
    
  • 10

    看看datejs图书馆http://www.datejs.com/

  • 10

    字符串解析的最佳字符串格式是日期ISO格式以及JavaScript Date对象构造函数 .

    ISO格式的示例: YYYY-MM-DDYYYY-MM-DDTHH:MM:SS .

    But wait! 仅使用"ISO format"本身无法可靠地工作 . 字符串有时被解析为UTC,有时也被解析为本地时间(基于浏览器供应商和版本) . 最佳做法应始终是将日期存储为UTC并将计算结果作为UTC .

    要将日期解析为UTC,请附加 Z - 例如: new Date('2011-04-11T10:20:30Z') .

    要以UTC显示日期,请使用 .toUTCString()
    要在用户的本地时间显示日期,请使用 .toString() .

    有关MDN | Datethis answer的更多信息 .

    对于旧的Internet Explorer兼容性(小于9的IE版本不支持Date构造函数中的ISO格式),您应该将日期时间字符串表示形式拆分为它的部分,然后您可以使用构造函数使用日期时间部分,例如: new Date('2011', '04' - 1, '11', '11', '51', '00') . 请注意,月份数必须少1 .


    Alternate method - use an appropriate library:

    您还可以利用库Moment.js,它允许使用指定的时区解析日期 .

  • 2
    //little bit of code for Converting dates 
    
                    var dat1 = document.getElementById('inputDate').value;
                    var date1 = new Date(dat1)//converts string to date object
                    alert(date1);
                    var dat2 = document.getElementById('inputFinishDate').value;
                    var date2 = new Date(dat2)
                    alert(date2);
    
  • 4

    使用此代码:(我的问题已通过此代码解决)

    function dateDiff(date1, date2){
    var diff = {}                           // Initialisation du retour
    var tmp = date2 - date1;
    
    tmp = Math.floor(tmp/1000);             // Nombre de secondes entre les 2 dates
    diff.sec = tmp % 60;                    // Extraction du nombre de secondes
    
    tmp = Math.floor((tmp-diff.sec)/60);    // Nombre de minutes (partie entière)
    diff.min = tmp % 60;                    // Extraction du nombre de minutes
    
    tmp = Math.floor((tmp-diff.min)/60);    // Nombre d'heures (entières)
    diff.hour = tmp % 24;                   // Extraction du nombre d'heures
    
    tmp = Math.floor((tmp-diff.hour)/24);   // Nombre de jours restants
    diff.day = tmp;
    
    return diff;
    

    }

  • 68

    只是 new Date(st);

    假设它是正确的格式 .

  • 11

    我使用此函数将任何Date对象转换为UTC Date对象 .

    function dateToUTC(date) {
        return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
    }
    
    
    dateToUTC(new Date());
    
  • 0

    您可以使用正则表达式来解析字符串到详细时间,然后创建日期或任何返回格式,如:

    //example : let dateString = "2018-08-17 01:02:03.4"
    
    function strToDate(dateString){
        let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/
      , [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateString)
      , dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds);
      return dateObject;
    }
    alert(strToDate(dateString));
    
  • 4

    我已创建parseDateTime函数将字符串转换为日期对象,它在所有浏览器(包括IE浏览器)中工作,检查是否有人需要,参考https://github.com/Umesh-Markande/Parse-String-to-Date-in-all-browser

    function parseDateTime(datetime) {
                var monthNames = [
                    "January", "February", "March",
                    "April", "May", "June", "July",
                    "August", "September", "October",
                    "November", "December"
                  ];
                if(datetime.split(' ').length == 3){
                    var date = datetime.split(' ')[0];
                    var time = datetime.split(' ')[1].replace('.00','');
                    var timearray = time.split(':');
                    var hours = parseInt(time.split(':')[0]);
                    var format = datetime.split(' ')[2];
                    var bits = date.split(/\D/);
                    date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                    var day = date.getDate();
                    var monthIndex = date.getMonth();
                    var year = date.getFullYear();
                    if ((format === 'PM' || format === 'pm') && hours !== 12) {
                        hours += 12;
                        try{  time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] }
                    } 
                    var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                    return formateddatetime;
                }else if(datetime.split(' ').length == 2){
                    var date = datetime.split(' ')[0];
                    var time = datetime.split(' ')[1];
                    var bits = date.split(/\D/);
                    var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                    var day = datetimevalue.getDate();
                    var monthIndex = datetimevalue.getMonth();
                    var year = datetimevalue.getFullYear();
                    var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + '  ' + year + ' ' + time);
                    return formateddatetime;
                }else if(datetime != ''){
                    var bits = datetime.split(/\D/);
                    var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits e.x ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/
                    return date;
                }
                return datetime;
            }
    
        var date1 = '2018-05-14 05:04:22 AM';   // yyyy-mm-dd hh:mm:ss A
        var date2 = '2018/05/14 05:04:22 AM';   // yyyy/mm/dd hh:mm:ss A
        var date3 = '2018/05/04';   // yyyy/mm/dd
        var date4 = '2018-05-04';   // yyyy-mm-dd
        var date5 = '2018-05-14 15:04:22';   // yyyy-mm-dd HH:mm:ss
        var date6 = '2018/05/14 14:04:22';   // yyyy/mm/dd HH:mm:ss
    
        console.log(parseDateTime(date1))
        console.log(parseDateTime(date2))
        console.log(parseDateTime(date3))
        console.log(parseDateTime(date4))
        console.log(parseDateTime(date5))
        console.log(parseDateTime(date6))
    
    **Output---**
    Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
    Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time)
    Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
    Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time)
    Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time)
    Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time)
    
  • 1

    对于在js中сonverting字符串到日期我使用 http://momentjs.com/

    moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm
    moment().format('dddd');                    // Sunday
    moment().format("MMM Do YY");               // Aug 16th 15
    moment().format('YYYY [escaped] YYYY');     // 2015 escaped 2015
    moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago
    moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
    moment().startOf('day').fromNow();        // 16 hours ago
    moment().endOf('day').fromNow();          // in 8 hours
    
  • 0
    var date = new Date(year, month, day);
    

    要么

    var date = new Date('01/01/1970');
    

    格式为'01 -01-1970'的日期字符串在FireFox中不起作用,因此最好在日期格式字符串中使用“/”而不是“ - ” .

  • 26

    你应该做 own function . 这将更多 convenient . 这是一个例子 . 您可以根据您的要求进行修改 .

    const  dateFormater = function(dt, seprator){
    
            let monthStore = ["January","February","March","April","May","June", "July","August","September","October","November","December"];
            
    
            const date = dt.split(seprator);
            //below choose month, day, year in the same order you passed in function as string
            const month = monthStore[date[0]-1]; 
            const day = date[1];
            const year = date[2];
            const dateToReturn = month+' '+day+' '+year // you can change order to print as required
    
            return(dateToReturn)
        }
    
    var formatedDate = dateFormater('12/11/2018','/'); // /m/d/y
    var formatedDate2 = dateFormater('09-10-2018','-');
    
    console.log(formatedDate);
    console.log(formatedDate2 )
    
  • 0

    ISO 8601-esque datetrings,与标准一样出色,仍未得到广泛支持 .

    这是一个很好的资源,可以确定您应该使用哪种日期字符串格式:

    http://dygraphs.com/date-formats.html

    是的,这意味着你的日期字符串可以简单到与之相反

    "2014/10/13 23:57:52" 而不是 "2014-10-13 23:57:52"

  • 1

    不幸的是我发现了

    var mydate = new Date('2014-04-03');
    console.log(mydate.toDateString());
    

    返回“2014年4月2日星期三” . 我知道这听起来很疯狂,但有些用户会发生这种情况 .

    bulletproof solution 如下:

    var parts ='2014-04-03'.split('-');
    // Please pay attention to the month (parts[1]); JavaScript counts months from 0:
    // January - 0, February - 1, etc.
    var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
    console.log(mydate.toDateString());
    
  • 17

    如果在转换为Date格式之前需要检查字符串的内容:

    // Convert 'M/D/YY' to Date()
    mdyToDate = function(mdy) {
      var d = mdy.split(/[\/\-\.]/, 3);
    
      if (d.length != 3) return null;
    
      // Check if date is valid
      var mon = parseInt(d[0]), 
          day = parseInt(d[1]),
          year= parseInt(d[2]);
      if (d[2].length == 2) year += 2000;
      if (day <= 31 && mon <= 12 && year >= 2015)
        return new Date(year, mon - 1, day);
    
      return null; 
    }
    
  • 102

    你也可以这样做:mydate.toLocaleDateString();

  • 0

    对于那些正在寻找一个小巧聪明的解决方案的人:

    String.prototype.toDate = function(format)
    {
      var normalized      = this.replace(/[^a-zA-Z0-9]/g, '-');
      var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
      var formatItems     = normalizedFormat.split('-');
      var dateItems       = normalized.split('-');
    
      var monthIndex  = formatItems.indexOf("mm");
      var dayIndex    = formatItems.indexOf("dd");
      var yearIndex   = formatItems.indexOf("yyyy");
      var hourIndex     = formatItems.indexOf("hh");
      var minutesIndex  = formatItems.indexOf("ii");
      var secondsIndex  = formatItems.indexOf("ss");
    
      var today = new Date();
    
      var year  = yearIndex>-1  ? dateItems[yearIndex]    : today.getFullYear();
      var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
      var day   = dayIndex>-1   ? dateItems[dayIndex]     : today.getDate();
    
      var hour    = hourIndex>-1      ? dateItems[hourIndex]    : today.getHours();
      var minute  = minutesIndex>-1   ? dateItems[minutesIndex] : today.getMinutes();
      var second  = secondsIndex>-1   ? dateItems[secondsIndex] : today.getSeconds();
    
      return new Date(year,month,day,hour,minute,second);
    };
    

    例:

    "22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
    "2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");
    
  • -3

    new Date(2000, 10, 1) 会给你"Wed Nov 01 2000 00:00:00 GMT+0100 (CET)"

    看到0月份给你一月

  • 1

    如果你想转换格式“dd / MM / yyyy” . 这是一个例子:

    var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
    var arrayDate = stringDate.match(pattern);
    var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);
    

    此解决方案适用于小于9的IE版本 .

  • 9

    moment.js(http://momentjs.com/)是一个完整而优秀的使用日期包,并支持ISO 8601 strings .

    您可以添加字符串日期和格式 .

    moment("12-25-1995", "MM-DD-YYYY");
    

    你可以检查一个日期是否有效 .

    moment("not a real date").isValid(); //Returns false
    

    见文档http://momentjs.com/docs/#/parsing/string-format/

    建议:我建议使用包含很多格式的日期,因为时区和格式时间管理确实是一个大问题,时刻js解决了很多格式 . 您可以轻松地从简单的字符串中解析日期,但我认为这是支持所有格式和日期变体的艰苦工作 .

  • 0
    function stringToDate(_date,_format,_delimiter)
    {
                var formatLowerCase=_format.toLowerCase();
                var formatItems=formatLowerCase.split(_delimiter);
                var dateItems=_date.split(_delimiter);
                var monthIndex=formatItems.indexOf("mm");
                var dayIndex=formatItems.indexOf("dd");
                var yearIndex=formatItems.indexOf("yyyy");
                var month=parseInt(dateItems[monthIndex]);
                month-=1;
                var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]);
                return formatedDate;
    }
    
    stringToDate("17/9/2014","dd/MM/yyyy","/");
    stringToDate("9/17/2014","mm/dd/yyyy","/")
    stringToDate("9-17-2014","mm-dd-yyyy","-")
    
  • 3
    var a = "13:15"
    var b = toDate(a, "h:m")
    alert(b);
    
    function toDate(dStr, format) {
      var now = new Date();
      if (format == "h:m") {
        now.setHours(dStr.substr(0, dStr.indexOf(":")));
        now.setMinutes(dStr.substr(dStr.indexOf(":") + 1));
        now.setSeconds(0);
        return now;
      } else
        return "Invalid Format";
    }
    
  • 17

    转换为pt-BR格式:

    var dateString = "13/10/2014";
        var dataSplit = dateString.split('/');
        var dateConverted;
    
        if (dataSplit[2].split(" ").length > 1) {
    
            var hora = dataSplit[2].split(" ")[1].split(':');
            dataSplit[2] = dataSplit[2].split(" ")[0];
            dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]);
    
        } else {
            dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]);
        }
    

    我希望能帮到别人!

  • 15

    将它作为参数传递给Date():

    var st = "date in some format"
    var dt = new Date(st);
    

    您可以使用例如: dt.getMonth() 来访问日期,月份和年份 .

  • 5

    还有另一种方法:

    String.prototype.toDate = function(format) {
        format = format || "dmy";
        var separator = this.match(/[^0-9]/)[0];
        var components = this.split(separator);
        var day, month, year;
        for (var key in format) {
            var fmt_value = format[key];
            var value = components[key];
            switch (fmt_value) {
                case "d":
                    day = parseInt(value);
                    break;
                case "m":
                    month = parseInt(value)-1;
                    break;
                case "y":
                    year = parseInt(value);
            }
        }
        return new Date(year, month, day);
    };
    a = "3/2/2017";
    console.log(a.toDate("dmy"));
    // Date 2017-02-03T00:00:00.000Z
    
  • 6

    你可以试试这个:

    function formatDate(userDOB) {
      const dob = new Date(userDOB);
    
      const monthNames = [
        'January', 'February', 'March',
        'April', 'May', 'June', 'July',
        'August', 'September', 'October',
        'November', 'December'
      ];
    
      const day = dob.getDate();
      const monthIndex = dob.getMonth();
      const year = dob.getFullYear();
    
      // return day + ' ' + monthNames[monthIndex] + ' ' + year;
      return `${day} ${monthNames[monthIndex]} ${year}`;
    }
    
    console.log(formatDate('1982-08-10'));
    
  • 2

    我为此创建了一个小提琴,您可以在任何日期字符串上使用toDate()函数并提供日期格式 . 这将返回Date对象 . https://jsfiddle.net/Sushil231088/q56yd0rp/

    "17/9/2014".toDate("dd/MM/yyyy", "/")
    
  • 0
    var st = "26.04.2013";
    var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
    var dt = new Date(st.replace(pattern,'$3-$2-$1'));
    

    输出将是:

    dt => Date {Fri Apr 26 2013}
    

相关问题