Skip to content Skip to sidebar Skip to footer

Function To Convert Php Date Format To Javascript Date Format (not The Date Itself !)

I am looking for easy way to convert PHP date format (i.e. Y-m-d H:i:s) to javascript date format (respectively YYYY-mm-dd HH:mm:ss). I don't want to convert the date (there are al

Solution 1:

If what you're asking is to use PHP formatting tokens to format an ECMAScript Date object, then something like the following might help. It supports all tokens except those for timezone names. I don't think you can do that reliably just with javascript in a browser, though something like node.js may be able to.

There are a few functions to go, such as whether daylight saving is being observed or not and generating an RFC 2822 format string, but they're easy to add I think. It supports quoted characters so you can build strings like:

P.format(date, 'jS \\o\\f F, Y') // 1st of August, 2019

Any character that doesn't match a token is copied to the output string (e.g. spaces and comma above).

// Parser and formatter using PHP tokenslet P = function(global) {

  let P = {lang: 'en-GB'};

  // Format tokens and functionslet tokens = {
  
    // DAY// day of month, pad to 2 digitsd: d =>pad(d.getDate()),
    // Day name, first 3 lettersD: d =>getDayName(d).substr(0,3),
    // day of month, no paddingj: d => d.getDate(),
    // Full day namel: d =>getDayName(d),
    // ISO weekday number (1 = Monday ... 7 = Sunday)N: d => d.getDay() || 7,
    // Ordinal suffix for day of the monthS: d =>getOrdinal(d.getDate()),
    // Weekday number (0 = Sunday, 6 = Saturday)w: d => d.getDay(),
    // Day of year, 1 Jan is 0z: d => {
      let Y = d.getFullYear(),
          M = d.getMonth(),
          D = d.getDate();
      returnMath.floor((Date.UTC(Y, M, D) - Date.UTC(Y, 0, 1)) / 8.64e7) ;
    },
    // ISO week number of yearW: d =>getWeekNumber(d)[1],
    // Full month nameF: d =>getMonthName(d),
    // Month number, paddedm: d =>pad(d.getMonth() + 1),
    // 3 letter month nameM: d =>getMonthName(d).substr(0, 3),
    // Month number, no padingn: d => d.getMonth() + 1,
    // Days in montht: d =>newDate(d.getFullYear(), d.getMonth() + 1, 0).getDate(),
    // Return 1 if d is a leap year, otherwise 0L: d =>newDate(d.getFullYear(), 1, 29).getDate() == 29? 1 : 0,
    // ISO week numbering yearo: d =>getWeekNumber(d)[0],
    // 4 digit yearY: d => {
      let year = d.getFullYear();
      if (year < 0) {
        year = '-' + ('000' + Math.abs(year)).slice(-4);
      }
      return year;
    },
    // 2 digit yeary: d => {
      let year = d.getFullYear();
      if (year >= 0) {
        return ('0' + year).slice(-2);
      } else {
        year = Math.abs(year);
        return - + ('0' + year).slice(-2);
      }
    },
    // Lowercase am or pma: d => d.getHours() < 12? 'am' : 'pm',
    // Uppercase AM or PMA: d => d.getHours() < 12? 'AM' : 'PM',
    // Swatch internet timeB: d => (((+d + 3.6e6) % 8.64e7) / 8.64e4).toFixed(0),
    // 12 hour hour no paddingg: d => (d.getHours() % 12) || 12,
    // 24 hour hour no paddingG: d => d.getHours(),
    // 12 hour hour paddedh: d =>pad((d.getHours() % 12) || 12),
    // 24 hour hour paddedH: d =>pad(d.getHours()),
    // Minutes paddedi: d =>pad(d.getMinutes()),
    // Seconds paddeds: d =>pad(d.getSeconds()),
    // Microseconds padded - always returns 000000u: d =>'000000',
    // Millisecondsv: d =>padd(d.getMilliseconds()),
    // Timezone identifier: UTC, GMT or IANA Tz database identifier - Not supportede: d =>void0,
    // If in daylight saving: 1 yes, 0 noI: d => d.getTimezoneOffset() == getOffsets(d)[0]? 0 : 1,
    // Difference to GMT in hours, e.g. +0200O: d =>minsToHours(-d.getTimezoneOffset(), false),
    // Difference to GMT in hours with colon, e.g. +02:00P: d =>minsToHours(-d.getTimezoneOffset(), true),
    // Timezone abbreviation, e.g. AEST. Dodgy but may work…T: d => d.toLocaleString('en',{year:'numeric',timeZoneName:'long'}).replace(/[^A-Z]/g, ''),
    // Timezone offset in seconds, +ve eastZ: d => d.getTimezoneOffset() * -60,
    
    // ISO 8601 format - UTC// c: d => d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +//        'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +//        '+00:00',// ISO 8601 format - localc: d => P.format(d, 'Y-m-d\\TH:i:sP'),
    // RFC 2822 formatted date, local timezoner: d => P.format(d, 'D, d M Y H:i:s O'),
    // Seconds since UNIX epoch (same as ECMAScript epoch)U: d => d.getTime() / 1000 | 0
  };
  
  // Helpers// Return day name for dateletgetDayName = d => d.toLocaleString(P.lang, {weekday:'long'});
  // Return month name for dateletgetMonthName = d => d.toLocaleString(P.lang, {month:'long'});
  // Return [std offest, DST offset]. If no DST, same offset for bothletgetOffsets = d => {
    let y = d.getFullYear();
    let offsets = [0, 2, 5, 9].map(m =>newDate(y, m).getTimezoneOffset());
    return [Math.max(...offsets), Math.min(...offsets)];
  }  
  // Return ordinal for positive integerletgetOrdinal = n => {
    n = n % 100;
    let ords = ['th','st','nd','rd'];
    return (n < 10 || n > 13) ? ords[n%10] || 'th' : 'th';
  };
  // Return ISO week number and yearletgetWeekNumber = d => {
    let e = newDate(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
    e.setUTCDate(e.getUTCDate() + 4 - (e.getUTCDay()||7));
    var yearStart = newDate(Date.UTC(e.getUTCFullYear(),0,1));
    var weekNo = Math.ceil(( ( (e - yearStart) / 86400000) + 1)/7);
    return [e.getUTCFullYear(), weekNo];
  };
  // Return true if o is a Date, otherwise falseletisDate = o => Object.prototype.toString.call(o) == '[object Date]';
  // Convert numeric minutes to +/-HHMM or +/-HH:MMletminsToHours = (mins, colon) => {
    let sign = mins < 0? '-' : '+';
    mins = Math.abs(mins);
    let H = pad(mins / 60 | 0);
    let M = pad(mins % 60);
    return sign + H + (colon? ':' : '') + M;
  };
  // Pad single digits with a leading zeroletpad = n => (n < 10? '0' : '') + n;
  // Pad single digits with two leading zeros, double digits with one leading zeroletpadd = n => (n < 10? '00' : n < 100? '0' : '') + n;
  // To be completed...letparse = s => 'not complete';

  P.parse = parse;
  
  // Format date using token string sfunctionformat(date, s) {
    // Minimal input validationif (!isDate(date) || typeof s != 'string') {
      return; // undefined
    }

    return s.split('').reduce((acc, c, i, chars) => {
      // Add quoted characters to outputif (c == '\\') {
        acc += chars.splice(i+1, 1);
      // If character matches a token, use it
      } elseif (c in tokens) {
        acc += tokens[c](date);
      // Otherwise, just add character to output
      } else {
        acc += c;
      }
      return acc;
    }, '');
  }
  P.format = format;
  
  return P;
}(this);


// Examplesconsole.log('Today is ' + P.format(newDate(), 'l, jS \\o\\f F, Y'));
let startPWars = newDate(-431,3,25);
let endPWars   = newDate(-404,0);
console.log('The Peloponnesian Wars started on ' + 
  P.format(startPWars, 'd F, Y') +
  ' and ended in ' +
  P.format(endPWars, 'Y'));

functionshowDate() {
  let format = document.getElementById('i0').value;
  document.getElementById('sp0').textContent = P.format(newDate(), format) || 'invalid tokens';
}
<inputid="i0"placeholder="PHP format, e.g. d-M-Y"><buttononclick="showDate()">Show formatted date</button><br><spanid="sp0"></span>

Post a Comment for "Function To Convert Php Date Format To Javascript Date Format (not The Date Itself !)"