将任何类型的日期格式转换为MM \ DD \ YYYY

时间:2017-09-04 01:30:21

标签: javascript date datetime google-apps-script

我将这两组日期转换为格式MM\DD\YYYY

1。Thu Aug 31 15:00:00 GMT+08:00 2017

  1. 2017-08-09
  2. 当我转换第一个时,我使用此代码。

    var STD_Date = STD_data[i][4]; //<----This is where the date comes.
    var date = convertDate(STD_Date);
    var datearray = date.split("/");
    var New_STDDate = datearray[1] + '/' + datearray[0] + '/' + datearray[2];
    

    这是函数convertDate()

    function convertDate(inputFormat) {
      function pad(s) { return (s < 10) ? '0' + s : s; }
      var d = new Date(inputFormat);
      return [pad(d.getDate()), pad(d.getMonth()+1), d.getFullYear()].join('/');
    }
    

    这是我格式化第二个的方式。

    这是功能

      var toMmDdYy = function(input) {
        var ptrn = /(\d{4})\-(\d{2})\-(\d{2})/;
        if(!input || !input.match(ptrn)) {
            return null;
        }
        return input.replace(ptrn, '$2/$3/$1');
    };
    

    这就是我使用它的方式。

    var startdate = form.startdate //<--- comes from HTML Picker (Format "YYYY-MM-DD")
    toMmDdYy(startdate)
    

    我的问题是,我怎么能有一个函数来格式化日期,无论是第一个还是第二个?

    Convert_TimeStamp_Date(){
      //This is where to code will go to convert
      //to MM\DD\YYYY
    }
    
    //Then call it
    var startdate = "2017-08-08"
    var timestamp = "Thu Aug 31 15:00:00 GMT+08:00 2017"
    Convert_TimeStamp_Date(startdate);
    Convert_TimeStamp_Date(timestamp);
    //both of them the output must be "MM\DD\YYYY"
    

    这是当前的代码,但期待更好的代码。的 WORKING

    //Time Stamp to MM\DD\YYYY
    function convertDate(inputFormat) {
      function pad(s) { return (s < 10) ? '0' + s : s; }
      var d = new Date(inputFormat);
      var chopdate = [pad(d.getDate()), pad(d.getMonth()+1), d.getFullYear()].join('/');
      var datearray = chopdate.split("/");
      var newdate  = datearray[1] + '/' + datearray[0] + '/' + datearray[2];
      return newdate;
    }
    
    //YYYY-MM-DD tp MM\DD\YYYY
    var toMmDdYy = function(input) {
        var ptrn = /(\d{4})\-(\d{2})\-(\d{2})/;
        if(!input || !input.match(ptrn)) {
            return null;
        }
        return input.replace(ptrn, '$2/$3/$1');
    };
    
    //Convert Date based on input to MM\DD\YYYY
    function ConverSpedDate(input){
       if( input.lenght > 10 ) return toMmDdYy(input);
        return convertDate(input);
    }
    

3 个答案:

答案 0 :(得分:1)

这应该有效

convertDate = function( input ){
    if( input.lenght > 10 ) return convertDate( input );
    return toMmDdYy( input );
}

答案 1 :(得分:0)

您可以测试每个模式并相应地重新格式化。您的重新格式化功能看起来很麻烦且容易出错,请考虑以下因素:

var startdate = "2017-08-23"
var timestamp = "Thu Aug 31 15:00:00 GMT+08:00 2017"

function reformatTimestamp(s) {

  if (/\d{4}-\d\d-\d\d/.test(s)) {
    return reformatISOtoMDY(s);
    
  } else if (/[a-z]{3} [a-z]{3} \d\d \d\d:\d\d:\d\d \w{3}\+\d\d:\d\d \d{4}/i.test(s)) {
    return reformatCustomToMDY(s);
  }
}

// Reformat YYYY-MM-DD  to MM\DD\YYYY
function reformatISOtoMDY(s) {
  var b = s.split(/\D/);
  return b[1] + '\' + b[2] + '\' + b[0];
}

function reformatCustomToMDY(s) {
  var months = '. jan feb mar apr may jun jul aug sep oct nov dec'.split(' ');
  var b = s.split(/ /);
  return ('0' + months.indexOf(b[1].toLowerCase())).slice(-2) +
    '\' + ('0' + b[2]).slice(-2) + '\' + b[5];
}

console.log(reformatTimestamp(startdate))
console.log(reformatTimestamp(timestamp))

格式MM \ DD \ YYYY不常见,可能会混淆。

答案 2 :(得分:0)

当您将此标记为GAS问题时,您是否查看过Utilities.formatDate()?文档here,但简而言之,它需要3个参数:日期对象,时区字符串&amp;格式字符串。 TZ&amp;格式取自Java SE SimpleDateFormat类。

在您的实例中,试试这个:

var ts = "Thu Aug 31 15:00:00 GMT+08:00 2017";
var d = new Date(ts);
Logger.log(Utilities.formatDate(d, "GMT+08:00", "MM/dd/yyyy")); // logs 08/31/2017

请注意,您必须自己在输出中设置时区。例如,您可以通过正则表达式从时间戳中提取它。由于JS Date原语是毫秒1970-01-01T00:00:00 UTC,您可以设置输出TZ以满足您的需求。

我还建议坚持ISO日期&amp;时间格式:MM / dd / yyyy缺少语言环境信息只是在寻找麻烦。