web-dev-qa-db-ja.com

JavaScriptの日付をyyyy-mm-ddにフォーマットする

こんにちはすべて私は2014年5月11日2014年5月11日日付フォーマットを持っていますどのように私はジャバスクリプトで2014-05-11にそれを変換することができます。

function taskDate(dateMilli) {
    var d = (new Date(dateMilli) + '').split(' ');
    d[2] = d[2] + ',';

    return [d[0], d[1], d[2], d[3]].join(' ');
}
var datemilli = Date.parse('Sun May 11,2014');
taskdate(datemilli);

上記のコードは私に同じ日付フォーマットを与えます

222
user3625547

できるよ

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) month = '0' + month;
    if (day.length < 2) day = '0' + day;

    return [year, month, day].join('-');
}

使用例

alert(formatDate('Sun May 11,2014'));

出力:

2014-05-11

フィドルのデモ: http://jsfiddle.net/abdulrauf6182012/2Frm3/ /

330
user3470953

日付をISO 8601形式にする組み込みのtoISOStringメソッドを利用するだけです。

yourDate.toISOString().split('T')[0]

yourDateはあなたの日付オブジェクトです。

270
Darth Egregious

形式yyyy-mm-dd :)で日付を取得するのにこの方法を使います

var todayDate = new Date().toISOString().slice(0,10);
80

日付をyyyy-mm-dd形式に変換する最も簡単な方法は、次のとおりです。

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

使い方 :

  • new Date("Sun May 11,2014")は、文字列"Sun May 11,2014"を、現在のロケールに基づくタイムゾーンの時間Sun May 11 2014 00:00:00を表す日付オブジェクトに変換します(ホストシステムの設定)。
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))は、タイムゾーンのオフセットを差し引いて、UTC(標準時)のSun May 11 2014 00:00:00に対応する日付オブジェクトに日付を変換します。
  • .toISOString()は日付オブジェクトをISO 8601文字列に変換します2014-05-11T00:00:00.000Z
  • .split("T")は文字列を配列["2014-05-11", "00:00:00.000Z"]に分割します
  • [0]はその配列の最初の要素を取ります

デモ

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

console.log(dateString);
52
John Slegers
format = function date2str(x, y) {
    var z = {
        M: x.getMonth() + 1,
        d: x.getDate(),
        h: x.getHours(),
        m: x.getMinutes(),
        s: x.getSeconds()
    };
    y = y.replace(/(M+|d+|h+|m+|s+)/g, function(v) {
        return ((v.length > 1 ? "0" : "") + eval('z.' + v.slice(-1))).slice(-2)
    });

    return y.replace(/(y+)/g, function(v) {
        return x.getFullYear().toString().slice(-v.length)
    });
}

結果:

format(new Date('Sun May 11,2014'), 'yyyy-MM-dd')
"2014-05-11
28
orangleliu

いくつかの答えの組み合わせ:

var d = new Date(date);
date = [
  d.getFullYear(),
  ('0' + (d.getMonth() + 1)).slice(-2),
  ('0' + d.getDate()).slice(-2)
].join('-');
12
aqwsez

toISOString()はあなたの日付が現地時間であると仮定し、それをUTCに変換します。あなたは間違った日付文字列を受け取るでしょう。

次のメソッドはあなたが必要とするものを返すべきです。

Date.prototype.yyyymmdd = function() {         

    var yyyy = this.getFullYear().toString();                                    
    var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based         
    var dd  = this.getDate().toString();             

    return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
};

ソース: https://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/

7
user1920925

ライブラリの使用に反対することが何もない場合あなたはそのようにmoments.jsライブラリを使用することができます...

var now = new Date();
var dateString = moment(now).format('YYYY-MM-DD');

var dateStringWithTime = moment(now).format('YYYY-MM-DD HH:mm:ss');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
6
Nifemi Sola-Ojo

あなたはこれを試すことができます: https://www.npmjs.com/package/timesolver

npm i timesolver

あなたのコードでそれを使う:

const timeSolver = require('timeSolver');
const date = new Date();
const dateString = timeSolver.getString(date, "YYYY-MM-DD");

このメソッドを使用して日付文字列を取得できます。

getString

これがお役に立てば幸いです。

4
sean1093

単にこれを使わないのはなぜですか

var date = new Date('1970-01-01');  //or your date here
console.log((date.getMonth() + 1) + '/' + date.getDate() + '/' +  date.getFullYear());

シンプルで甘い。

4
Pardeep Jain

これらの答えのどれも私をかなり満足させませんでした。私は、外部のライブラリを使わずに現地の時間帯で一日を過ごすことができるクロスプラットフォームのソリューションを望んでいました。

これが私が思いついたものです。

function localDay(time) {
  var minutesOffset = time.getTimezoneOffset()
  var millisecondsOffset = minutesOffset*60*1000
  var local = new Date(time - millisecondsOffset)
  return local.toISOString().substr(0, 10)
}

これは、日付が参照するタイムゾーンで、YYYY-MM-DDの形式で日付の日付を返します。

たとえば、localDay(new Date("2017-08-24T03:29:22.099Z"))はすでにUTCで24日目ですが、"2017-08-23"を返します。

IE8で動作させるには polyfill Date.prototype.toISOStringが必要ですが、それ以外の場所ではサポートされているはずです。

3
Erik Pukinskis

毎回複製するのではなく、 https://github.com/brightbits/formatDate-js のようなものを使用することをお勧めします。単にすべての主要なstrftimeアクションをサポートするライブラリを使用してください。

new Date().format("%Y-%m-%d")
3
Michael Baldry

タイムゾーンも考慮するには、この1つのライナーは、ライブラリがなくても適切です。

new Date().toLocaleString("en-IN", {timeZone: "Asia/Kolkata"}).split(',')[0]

2
krsoni
var d = new Date("Sun May 1,2014");

var year  = d.getFullYear();
var month = d.getMonth() + 1;
var day   = d.getDate(); 

month = checkZero(month);             
day   = checkZero(day);

var date = "";

date += year;
date += "-";
date += month;
date += "-";
date += day;

document.querySelector("#display").innerHTML = date;
    
function checkZero(i) 
{
    if (i < 10) 
    {
        i = "0" + i
    };  // add zero in front of numbers < 10

    return i;
}
<div id="display"></div>
1
antelove

PHP互換の日付フォーマット

これはPHP function date()と同じパラメータを取り、javascriptで日付/時刻文字列を返すことができる小さな関数です。

PHPのすべてのdate()フォーマットオプションがサポートされているわけではないことに注意してください。 partsオブジェクトを拡張して、欠けているformat-tokenを作成することができます

/** 
 * Date formatter with PHP "date()"-compatible format syntax.
 */
const formatDate = (format, date) => {
  if (!format) { format = 'Y-m-d' }
  if (!date) { date = new Date() }

  const parts = {
    Y: date.getFullYear().toString(),
    y: ('00' + (date.getYear() - 100)).toString().slice(-2),
    m: ('0' + (date.getMonth() + 1)).toString().slice(-2),
    n: (date.getMonth() + 1).toString(),
    d: ('0' + date.getDate()).toString().slice(-2),
    j: date.getDate().toString(),
    H: ('0' + date.getHours()).toString().slice(-2),
    G: date.getHours().toString(),
    i: ('0' + date.getMinutes()).toString().slice(-2),
    s: ('0' + date.getSeconds()).toString().slice(-2)
  }

  const modifiers = Object.keys(parts).join('')
  const reDate = new RegExp('(?<!\\\\)[' + modifiers + ']', 'g')
  const reEscape = new RegExp('\\\\([' + modifiers + '])', 'g')

  return format
    .replace(reDate, $0 => parts[$0])
    .replace(reEscape, ($0, $1) => $1)
}

// ----- EXAMPLES -----
console.log( formatDate() ); // "2019-05-21"
console.log( formatDate('H:i:s') ); // "16:21:32"
console.log( formatDate('Y-m-d, o\\n H:i:s') ); // "2019-05-21, on 16:21:32"
console.log( formatDate('Y-m-d', new Date(2000000000000)) ); // "2033-05-18"
1
Philipp
function formatDate(date) {
    var year = date.getFullYear().toString();
    var month = (date.getMonth() + 101).toString().substring(1);
    var day = (date.getDate() + 100).toString().substring(1);
    return year + "-" + month + "-" + day;
}

alert(formatDate(new Date()));
1
Luo Jiong Hui
function myYmd(D){
    var pad = function(num) {
        var s = '0' + num;
        return s.substr(s.length - 2);
    }
    var Result = D.getFullYear() + '-' + pad((D.getMonth() + 1)) + '-' + pad(D.getDate());
    return Result;
}

var datemilli = new Date('Sun May 11,2014');
document.write(myYmd(datemilli));
1
Andrei

これは私にとって望ましい形式で現在の日付を取得するのに役立ちました(YYYYMMDD HH:MM:SS

var d = new Date();
var date1=d.getFullYear()+''+((d.getMonth()+1)<10?"0"+(d.getMonth()+1):(d.getMonth()+1))+''+(d.getDate()<10?"0"+d.getDate():d.getDate());
var time1=(d.getHours()<10?"0"+d.getHours():d.getHours())+':'+(d.getMinutes()<10?"0"+d.getMinutes():d.getMinutes())+':'+(d.getSeconds()<10?"0"+d.getSeconds():d.getSeconds());
print(date1+' '+time1);
1
SaP

Date.jsはこれに最適です。

require("datejs")
(new Date()).toString("yyyy-MM-dd")
1
Tan Wang

日付文字列の再フォーマットはかなり簡単です。

var s = 'Sun May 11,2014';

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

console.log(reformatDate(s));
1
RobG

ハッシュマップデータから最大、最小日付をフォーマットして見つける

var obj = {"a":'2001-15-01', "b": '2001-12-02' , "c": '2001-1-03'};

function findMaxMinDate(obj){
  let formatEncode = (id)=> { let s = id.split('-'); return `${s[0]+'-'+s[2]+'-'+s[1]}`}
  let formatDecode = (id)=> { let s = id.split('/'); return `${s[2]+'-'+s[0]+'-'+s[1]}`}
  let arr = Object.keys( obj ).map(( key )=> { return new Date(formatEncode(obj[key])); });
  let min = new Date(Math.min.apply( null, arr )).toLocaleDateString();
  let max = new Date(Math.max.apply( null, arr )).toLocaleDateString();
  return {maxd: `${formatDecode(max)}`, mind:`${formatDecode(min)}`}
}

console.log(findMaxMinDate(obj));
0
KARTHIKEYAN.A

上記のいくつかは問題ありませんでした - しかしあまり柔軟ではありませんでした。もっと多くのEdgeのケースを処理できるものが欲しいので、@ orangleliuの答えを取り、それについて詳しく説明しました。 https://jsfiddle.net/8904cmLd/1/ /

function DateToString(inDate, formatString) {
// Written by m1m1k 2018-04-05

// Validate that we're working with a date
if(!isValidDate(inDate))
{
    inDate = new Date(inDate);
}
// see the jsFiddle for extra code to be able to use DateToString('Sun May 11,2014','USA');
//formatString = CountryCodeToDateFormat(formatString);

  var dateObject = {
    M: inDate.getMonth() + 1,
    d: inDate.getDate(),
    D: inDate.getDate(),
    h: inDate.getHours(),
    m: inDate.getMinutes(),
    s: inDate.getSeconds(),
    y: inDate.getFullYear(),
    Y: inDate.getFullYear()
  };
  // Build Regex Dynamically based on the list above.
  // Should end up with something like this "/([Yy]+|M+|[Dd]+|h+|m+|s+)/g"
  var dateMatchRegex = joinObj(dateObject, "+|") + "+";
  var regEx = new RegExp(dateMatchRegex,"g");
  formatString = formatString.replace(regEx, function(formatToken) {
    var datePartValue = dateObject[formatToken.slice(-1)];
    var tokenLength = formatToken.length;

    // A conflict exists between specifying 'd' for no zero pad -> expand to '10' and specifying yy for just two year digits '01' instead of '2001'.  One expands, the other contracts.
    // so Constrict Years but Expand All Else
    if(formatToken.indexOf('y') < 0 && formatToken.indexOf('Y') < 0)
    {
        // Expand single digit format token 'd' to multi digit value '10' when needed
        var tokenLength = Math.max(formatToken.length, datePartValue.toString().length);
    }
        var zeroPad = (datePartValue.toString().length < formatToken.length ? "0".repeat(tokenLength) : "");
    return (zeroPad + datePartValue).slice(-tokenLength);
  });

    return formatString;
}

使用例

DateToString('Sun May 11,2014', 'MM/DD/yy');
DateToString('Sun May 11,2014', 'yyyy.MM.dd');
DateToString(new Date('Sun Dec 11,2014'),'yy-M-d');
0
m1m1k

答えのさらに別の組み合わせ。読みやすいですが、少し長いです。

function getCurrentDayTimestamp() {
  const d = new Date();

  return new Date(
    Date.UTC(
      d.getFullYear(),
      d.getMonth(),
      d.getDate(),
      d.getHours(),
      d.getMinutes(),
      d.getSeconds()
    )
  // `toIsoString` returns something like "2017-08-22T08:32:32.847Z"
  // and we want the first part ("2017-08-22")
  ).toISOString().slice(0, 10);
}
0
kadrian

Samit Satputeの回答を次のように修正しました。

var newstartDate = new Date();
// newstartDate.setDate(newstartDate.getDate() - 1);
var startDate = newstartDate.toISOString().replace(/[-T:\.Z]/g, ""); //.slice(0, 10); // To get the Yesterday's Date in YYYY MM DD Format
console.log(startDate);
0
suleman
new Date(new Date(YOUR_DATE.toISOString()).getTime() - 
                 (YOUR_DATE.getTimezoneOffset() * 60 * 1000)).toISOString().substr(0, 10)
0
Lin

私の date-shortcode packageで簡単に実現できます。

const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYY-MM-DD}', 'Sun May 11,2014')
//=> '2014-05-11'
0
Kodie Grantham

ライブラリは必要ありません

単なる純粋なJavaScript

以下の例は、今日から2か月後のものです。

var d = new Date()
d.setMonth(d.getMonth() - 2);
var dateString = new Date(d);
console.log('Before Format', dateString, 'After format', dateString.toISOString().slice(0,10))
0

これを行う1つの方法は次のとおりです。

var date = Date.parse('Sun May 11,2014');

function format(date) {
  date = new Date(date);

  var day = ('0' + date.getDate()).slice(-2);
  var month = ('0' + (date.getMonth() + 1)).slice(-2);
  var year = date.getFullYear();

  return year + '-' + month + '-' + day;
}

console.log(format(date));
0
Gergo Erdosi

たとえば、データベースからの値を表すために日付をすべてのタイムゾーンで同じにする必要がある場合は、js dateオブジェクトに対してutcバージョンのutcバージョンを使用してください。特定のタイムゾーンこのような書式設定にはmoment.js日付ライブラリを使用することをお勧めします。

0
GameSalutes