PHPの日付形式をJavascriptの日付形式に変換する関数(日付自体ではありません!)

マーシン

PHPの日付形式(つまりYmd H:i:s)をjavascriptの日付形式(それぞれYYYY-mm-dd HH:mm:ss)に変換する簡単な方法を探しています。

日付を変換したくない(この質問に対する回答はすでにあります)、フォーマットコード変換するためのツール/関数を探しています(アプリケーションでユーザーが定義しているため、まだわかりません) 。

ユーザーは、PHP date()で定義されたさまざまな方法で定義できます。つまり、「Y / m / dH:i」または「YdmHi」であり、JavaScriptで日付を表示するときに同じ形式を使用する必要があります。

あなたはそれを作るための準備ができている変換関数を知っていますか?

<?php
$timeformat_php = "H:i:s"; //just defined by the user
$time_universal = date( $timeformat_php, strtotime( $time_php ) );
echo date($timeformat_php, $time_universal); //print as defined by user
?>

<script>
var timeformatPhp = '<?php echo $timeformat_php ?>';
var timeformatJavascript = functionThatIamLookingFor (timeformatPhp);
alert(moment($time_universal).format(timeformatJavascript); //printed again the way user defined
</script>

どんな助けでもありがたいです。ありがとう。

RobG

PHPフォーマットトークンを使用してECMAScriptDateオブジェクトをフォーマットすることを求めている場合は、次のようなものが役立つ可能性があります。タイムゾーン名以外のすべてのトークンをサポートします。node.jsのようなものはできるかもしれませんが、ブラウザのjavascriptだけでそれを確実に行うことができるとは思いません。

夏時間が採用されているかどうかやRFC2822形式の文字列を生成するなど、いくつかの機能がありますが、簡単に追加できると思います。引用符で囲まれた文字をサポートしているため、次のような文字列を作成できます。

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

トークンと一致しない文字はすべて出力文字列にコピーされます(たとえば、上記のスペースとコンマ)。

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

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

  // Format tokens and functions
  let tokens = {
  
    // DAY
    // day of month, pad to 2 digits
    d: d => pad(d.getDate()),
    // Day name, first 3 letters
    D: d => getDayName(d).substr(0,3),
    // day of month, no padding
    j: d => d.getDate(),
    // Full day name
    l: d => getDayName(d),
    // ISO weekday number (1 = Monday ... 7 = Sunday)
    N: d => d.getDay() || 7,
    // Ordinal suffix for day of the month
    S: d => getOrdinal(d.getDate()),
    // Weekday number (0 = Sunday, 6 = Saturday)
    w: d => d.getDay(),
    // Day of year, 1 Jan is 0
    z: d => {
      let Y = d.getFullYear(),
          M = d.getMonth(),
          D = d.getDate();
      return Math.floor((Date.UTC(Y, M, D) - Date.UTC(Y, 0, 1)) / 8.64e7) ;
    },
    // ISO week number of year
    W: d => getWeekNumber(d)[1],
    // Full month name
    F: d => getMonthName(d),
    // Month number, padded
    m: d => pad(d.getMonth() + 1),
    // 3 letter month name
    M: d => getMonthName(d).substr(0, 3),
    // Month number, no pading
    n: d => d.getMonth() + 1,
    // Days in month
    t: d => new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate(),
    // Return 1 if d is a leap year, otherwise 0
    L: d => new Date(d.getFullYear(), 1, 29).getDate() == 29? 1 : 0,
    // ISO week numbering year
    o: d => getWeekNumber(d)[0],
    // 4 digit year
    Y: d => {
      let year = d.getFullYear();
      if (year < 0) {
        year = '-' + ('000' + Math.abs(year)).slice(-4);
      }
      return year;
    },
    // 2 digit year
    y: 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 pm
    a: d => d.getHours() < 12? 'am' : 'pm',
    // Uppercase AM or PM
    A: d => d.getHours() < 12? 'AM' : 'PM',
    // Swatch internet time
    B: d => (((+d + 3.6e6) % 8.64e7) / 8.64e4).toFixed(0),
    // 12 hour hour no padding
    g: d => (d.getHours() % 12) || 12,
    // 24 hour hour no padding
    G: d => d.getHours(),
    // 12 hour hour padded
    h: d => pad((d.getHours() % 12) || 12),
    // 24 hour hour padded
    H: d => pad(d.getHours()),
    // Minutes padded
    i: d => pad(d.getMinutes()),
    // Seconds padded
    s: d => pad(d.getSeconds()),
    // Microseconds padded - always returns 000000
    u: d => '000000',
    // Milliseconds
    v: d => padd(d.getMilliseconds()),
    // Timezone identifier: UTC, GMT or IANA Tz database identifier - Not supported
    e: d => void 0,
    // If in daylight saving: 1 yes, 0 no
    I: d => d.getTimezoneOffset() == getOffsets(d)[0]? 0 : 1,
    // Difference to GMT in hours, e.g. +0200
    O: d => minsToHours(-d.getTimezoneOffset(), false),
    // Difference to GMT in hours with colon, e.g. +02:00
    P: 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 east
    Z: 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 - local
    c: d => P.format(d, 'Y-m-d\\TH:i:sP'),
    // RFC 2822 formatted date, local timezone
    r: 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 date
  let getDayName = d => d.toLocaleString(P.lang, {weekday:'long'});
  // Return month name for date
  let getMonthName = d => d.toLocaleString(P.lang, {month:'long'});
  // Return [std offest, DST offset]. If no DST, same offset for both
  let getOffsets = d => {
    let y = d.getFullYear();
    let offsets = [0, 2, 5, 9].map(m => new Date(y, m).getTimezoneOffset());
    return [Math.max(...offsets), Math.min(...offsets)];
  }  
  // Return ordinal for positive integer
  let getOrdinal = 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 year
  let getWeekNumber = d => {
    let e = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
    e.setUTCDate(e.getUTCDate() + 4 - (e.getUTCDay()||7));
    var yearStart = new Date(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 false
  let isDate = o => Object.prototype.toString.call(o) == '[object Date]';
  // Convert numeric minutes to +/-HHMM or +/-HH:MM
  let minsToHours = (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 zero
  let pad = n => (n < 10? '0' : '') + n;
  // Pad single digits with two leading zeros, double digits with one leading zero
  let padd = n => (n < 10? '00' : n < 100? '0' : '') + n;
  // To be completed...
  let parse = s => 'not complete';

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

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


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

function showDate() {
  let format = document.getElementById('i0').value;
  document.getElementById('sp0').textContent = P.format(new Date(), format) || 'invalid tokens';
}
<input id="i0" placeholder="PHP format, e.g. d-M-Y">
<button onclick="showDate()">Show formatted date</button>
<br>
<span id="sp0"></span>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ある日付形式を別の日付形式に変換する

分類Dev

PySparkで日付と文字列の形式を変換するのに役立つ関数はありますか?

分類Dev

ISO 8601の基本的な日付形式をTDateに変換できるDelphiRTL関数はありますか?

分類Dev

PHPで1つの日付形式を別の日付形式に変換する

分類Dev

jsonの日付をjavascriptの日付形式に変換する

分類Dev

Javascriptの日付をiOSの日付形式に変換する方法

分類Dev

JavaScript の日付を json の日付形式に変換する

分類Dev

複数の日付形式を日時Pythonに変換する方法はありますか

分類Dev

PHPで日付を特定の形式に変換する方法は?

分類Dev

JavaScriptで日付をある形式から別の形式に変換する

分類Dev

Javascriptの日付形式を変換する

分類Dev

'May'の日付を数値形式に変換するRでは機能しません

分類Dev

数値形式のExcelから日付形式のPythonに日付を変換する

分類Dev

日付形式の変換は、SQLServerの自作の日付文字列では有効になりません

分類Dev

Excelの日付を希望の形式に変換できません

分類Dev

日付を目的の形式に変換できません

分類Dev

日付を特定の形式に変換できません

分類Dev

PHPでGMT日付形式を単純日付に変換する

分類Dev

PHPは、日付形式を時間のある長い日付から基本日付に変更します

分類Dev

文字列の日付をISO形式の日付に変換する

分類Dev

文字の日付形式をRの日付に変換する

分類Dev

JSの日付形式をPHPに変更する関数

分類Dev

異なる形式のPHPで日付形式を変換する

分類Dev

文字列の日付をISO日付形式の日付に変換する方法

分類Dev

日付をmysqlの日付形式に変換する方法

分類Dev

文字列を複数の形式で日付に変換する

分類Dev

日付は特定の形式に変換する必要があります-AngularJs

分類Dev

UNIXを日付に変換する必要がありますが、一部の値はすでに日付形式になっています

分類Dev

日付文字列を目的の日付形式に変換すると、出力はnilになります

Related 関連記事

  1. 1

    ある日付形式を別の日付形式に変換する

  2. 2

    PySparkで日付と文字列の形式を変換するのに役立つ関数はありますか?

  3. 3

    ISO 8601の基本的な日付形式をTDateに変換できるDelphiRTL関数はありますか?

  4. 4

    PHPで1つの日付形式を別の日付形式に変換する

  5. 5

    jsonの日付をjavascriptの日付形式に変換する

  6. 6

    Javascriptの日付をiOSの日付形式に変換する方法

  7. 7

    JavaScript の日付を json の日付形式に変換する

  8. 8

    複数の日付形式を日時Pythonに変換する方法はありますか

  9. 9

    PHPで日付を特定の形式に変換する方法は?

  10. 10

    JavaScriptで日付をある形式から別の形式に変換する

  11. 11

    Javascriptの日付形式を変換する

  12. 12

    'May'の日付を数値形式に変換するRでは機能しません

  13. 13

    数値形式のExcelから日付形式のPythonに日付を変換する

  14. 14

    日付形式の変換は、SQLServerの自作の日付文字列では有効になりません

  15. 15

    Excelの日付を希望の形式に変換できません

  16. 16

    日付を目的の形式に変換できません

  17. 17

    日付を特定の形式に変換できません

  18. 18

    PHPでGMT日付形式を単純日付に変換する

  19. 19

    PHPは、日付形式を時間のある長い日付から基本日付に変更します

  20. 20

    文字列の日付をISO形式の日付に変換する

  21. 21

    文字の日付形式をRの日付に変換する

  22. 22

    JSの日付形式をPHPに変更する関数

  23. 23

    異なる形式のPHPで日付形式を変換する

  24. 24

    文字列の日付をISO日付形式の日付に変換する方法

  25. 25

    日付をmysqlの日付形式に変換する方法

  26. 26

    文字列を複数の形式で日付に変換する

  27. 27

    日付は特定の形式に変換する必要があります-AngularJs

  28. 28

    UNIXを日付に変換する必要がありますが、一部の値はすでに日付形式になっています

  29. 29

    日付文字列を目的の日付形式に変換すると、出力はnilになります

ホットタグ

アーカイブ