Home  >  Q&A  >  body text

javascript - js, date conversion failed

I use

var time = new Date("17 五月 2017 14:01:59")

Conversion error, but use

var time = new Date("2017-05-17 14:01:59")

Conversion successful.
If I have to convert using the following date format:

17 五月 2017 14:01:59  

How to deal with it?

阿神阿神2711 days ago667

reply all(7)I'll reply

  • 大家讲道理

    大家讲道理2017-05-18 10:49:30

    const dateStr = '17 五月 2017 14:01:59'
    
    function convert2ISO8061 (dateStr) {
      const units = dateStr.split(' ')
      return units[2] + '-' + convertMonth(units[1]) + '-' + units[0] + 'T' + units[3] + 'Z'
    }
    
    function convertMonth (mStr) {
      const months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
      const month = months.indexOf(mStr) + 1
      if (month < 10) {
        return '0' + month
      }
      return parseInt(month)
    }
    
    console.log(Date.parse(convert2ISO8061(dateStr)))
    

    reply
    0
  • 阿神

    阿神2017-05-18 10:49:30

    First convert "17 五月 2017 14:01:59" 使用 split(' ') into an array arr.

    Write another function to convert Chinese characters 五月 into numeric form, and then use the array arr to iterate and recombine it into the date format you need.

    reply
    0
  • 迷茫

    迷茫2017-05-18 10:49:30

    var time = new Date("17 May 2017 14:01:59"); It's ok;
    so you just need to replace the Chinese month with the English abbreviation and it's ok.

    reply
    0
  • 習慣沉默

    習慣沉默2017-05-18 10:49:30

    You need to re-do the May one yourself and then splice it

    reply
    0
  • PHP中文网

    PHP中文网2017-05-18 10:49:30

    I misunderstood the meaning just now, but it can be written like this according to the above idea

    function converDate(date){
      var arr=date.split(' ');
      var ENdate=['Jan', 'Feb', 'Mar', 'April', 'May', 'Jan', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
      var CNdate=['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'];
      var idx=CNdate.indexOf(arr[1]);
      arr[1]=ENdate[idx];
      return new Date(arr.join(' '));
    }
    converDate('17 五月 2017 14:01:59');

    reply
    0
  • 仅有的幸福

    仅有的幸福2017-05-18 10:49:30

    DateUtils = {
        format : function(date, format) {
            if (date == null || date.length == 0)
                return '';
    
            if (typeof(date) == 'number')
                date = new Date(date);
            
            var dayArray = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
            
            var o = {
                "M+" : date.getMonth() + 1,
                "d+" : date.getDate(),
                "H+" : date.getHours(),
                "m+" : date.getMinutes(),
                "s+" : date.getSeconds(),
                "q+" : Math.floor((date.getMonth() + 3) / 3),
                "S" : date.getMilliseconds(),
                "day" : dayArray[date.getDay()]
            };
    
            if (/(y+)/.test(format))
                format = format.replace(RegExp., (date.getFullYear() + "").substr(4 - RegExp..length));
    
            for (var k in o) {
                if (new RegExp("(" + k + ")").test(format)) {
                    if (k == "day")
                        format = format.replace(RegExp., o[k]);
                    else
                        format = format.replace(RegExp., RegExp..length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
                }
            }
    
            return format;
        },
        
        parse : function(string, format) {
            if (format == null || format.length == 0) {
                var time = Date.parse(string);
                return new Date(time);
            }
        
            if (!DateUtils.isValidate(string, format))
                return new Date();
        
            var regexp = DateUtils.regexp(format);
            var index = DateUtils.validateIndex(format);
        
            var dateArray = regexp.exec(string);
        
            var now = new Date();
            var year = (index[0] >= 0) ? dateArray[index[0] + 1] : now.getFullYear();
            var month = (index[1] >= 0) ? (dateArray[index[1] + 1] - 1) : now.getMonth();
            var day = (index[2] >= 0) ? dateArray[index[2] + 1] : now.getDate();
            var hour = (index[3] >= 0) ? dateArray[index[3] + 1] : "";
            var minute = (index[4] >= 0) ? dateArray[index[4] + 1] : "";
            var second = (index[5] >= 0) ? dateArray[index[5] + 1] : "";
        
            var date = (hour == "") ? new Date(year, month, day) : new Date(year, month, day, hour, minute, second);
            if (date.getDate() == day)
                return date;
        
            return new Date();
        },
        
        display : function(dateString) {
            if (dateString == null || dateString.length == 0)
                return '';
            
            var format = 'yyyyMMdd';
            if (dateString.length == format.length) {
                var date = DateUtils.parse(dateString, format);
                return DateUtils.format(date, 'yyyy-MM-dd');
            }
            
            format = 'yyyyMMddHHmmss';
            if (dateString.length == format.length) {
                var date = DateUtils.parse(dateString, format);
                return DateUtils.format(date, 'yyyy-MM-dd HH:mm:ss');
            }
            
            return dateString;
        },
        
        trimDisplay : function(dateString) {
            if (dateString == null || dateString.length == 0)
                return '';
            
            return dateString.replace(/[^0-9]+/g, '');
        },
    
        addDays : function(date, amount) {
            var time = 1000 * 60 * 60 * 24 * amount;
            return new Date(date.getTime() + time);
        },
        
        secondToTimeString : function(second) {
            if (second == null || second.length == 0)
                return '';
            
            if (second < 60)
                return '00:00:' + DateUtils.toFormatString(second, 2, '0');
            else if (second < 3600) {
                var minute = parseInt(second / 60);
                return '00:' + DateUtils.toFormatString(minute, 2, '0') + ':' + DateUtils.toFormatString(second % 60, 2, '0');
            } else if (second < 86400) {
                var hour = parseInt(second / 3600);
                var minute = parseInt(second % 3600 / 60);
                return DateUtils.toFormatString(hour, 2, '0') + ':' + DateUtils.toFormatString(minute, 2, '0') + ':' + DateUtils.toFormatString(second % 60, 2, '0');
            } else {
                var day = parseInt(second / 86400);
                var hour = parseInt(second % 86400 / 3600);
                var minute = parseInt(second % 86400 % 3600 / 60);
                return day + '.' + DateUtils.toFormatString(hour, 2, '0') + ':' + DateUtils.toFormatString(minute, 2, '0') + ':' + DateUtils.toFormatString(second % 60, 2, '0');
            }
        },
    
        toFormatString : function(value, length, missValue) {
            var string = value + '';
            if (string.length >= length) {
                return string;
            } else {
                while (string.length < length)
                    string = missValue + string;
                
                return string;
            }
        },
        
        regexp : function(format) {
            var y4 = "([0-9]{4})";
            var y2 = "([0-9]{2})";
            var M2 = "(0[1-9]|1[0-2])";
            var M1 = "([1-9]|1[0-2])";
            var d2 = "(0[1-9]|[1-2][0-9]|30|31)";
            var d1 = "([1-9]|[1-2][0-9]|30|31)";
            var H2 = "([0-1][0-9]|20|21|22|23)";
            var H1 = "([0-9]|1[0-9]|20|21|22|23)";
            var m2 = "([0-5][0-9])";
            var m1 = "([0-9]|[1-5][0-9])";
            var s2 = "([0-5][0-9])";
            var s1 = "([0-9]|[1-5][0-9])";
        
            var reg = format;
            reg = reg.replace(/yyyy/, y4);
            reg = reg.replace(/yy/, y2);
            reg = reg.replace(/MM/, M2);
            reg = reg.replace(/M/, M1);
            reg = reg.replace(/dd/, d2);
            reg = reg.replace(/d/, d1);
            reg = reg.replace(/HH/, H2);
            reg = reg.replace(/H/, H1);
            reg = reg.replace(/mm/, m2);
            reg = reg.replace(/m/, m1);
            reg = reg.replace(/ss/, s2);
            reg = reg.replace(/s/, s1);
        
            return new RegExp("^" + reg + "$");
        },
        
        isValidate : function(string, format) {
            if (string == null || string.length == 0)
                return false;
        
            var trimString = string.replace(/(^\s*)|(\s*$)/g, "");
            if (trimString == null || trimString.length == 0)
                return false;
        
            return DateUtils.regexp(format).test(string);
        },
        
        validateIndex : function(format) {
            var array = new Array();
            var i = 0, j = 0;
        
            var yi = format.search(/yyyy/);
            if (yi < 0)
                yi = format.search(/yy/);
            if (yi >= 0) {
                array[i] = yi;
                i++;
            }
        
            var Mi = format.search(/MM/);
            if (Mi < 0)
                Mi = format.search(/M/);
            if (Mi >= 0) {
                array[i] = Mi;
                i++;
            }
        
            var di = format.search(/dd/);
            if (di < 0)
                di = format.search(/d/);
            if (di >= 0) {
                array[i] = di;
                i++;
            }
        
            var Hi = format.search(/HH/);
            if (Hi < 0)
                Hi = format.search(/H/);
            if (Hi >= 0) {
                array[i] = Hi;
                i++;
            }
        
            var mi = format.search(/mm/);
            if (mi < 0)
                mi = format.search(/m/);
            if (mi >= 0) {
                array[i] = mi;
                i++;
            }
        
            var si = format.search(/ss/);
            if (si < 0)
                si = format.search(/s/);
            if (si >= 0) {
                array[i] = si;
                i++;
            }
        
            var resultArray = new Array(yi, Mi, di, Hi, mi, si);
        
            for (i = 0; i < array.length - 1; i++) {
                for (j = 0; j < array.length - 1 - i; j++) {
                    if (array[j] <= array[j + 1])
                        continue;
        
                    var temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        
            for (i = 0; i < array.length; i++) {
                for (j = 0; j < resultArray.length; j++) {
                    if (array[i] != resultArray[j])
                        continue;
        
                    resultArray[j] = i;
                }
            }
        
            return resultArray;
        }
    };
    var monthObject = {
        '一月' : '01',
        '二月' : '02',
        '三月' : '03',
        '四月' : '04',
        '五月' : '05',
        '六月' : '06',
        '七月' : '07',
        '八月' : '08',
        '九月' : '09',
        '十月' : '10',
        '十一月' : '11',
        '十二月' : '12'
    }
    var string = '17 五月 2017 14:01:59';
    var keys = Object.keys(monthObject);
    for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        string = string.replace(key, monthObject[key]);
    }
    console.log(string);
    
    var date = DateUtils.parse(string, 'dd MM yyyy HH:mm:ss');
    console.log(date);
    console.log(DateUtils.format(date, 'yyyy-MM-dd HH:mm:ss'));

    reply
    0
  • 阿神

    阿神2017-05-18 10:49:30

    moment.js

    reply
    0
  • Cancelreply