Форматировать дату JavaScript в гггг-ММ-ДД

Привет всем у меня есть формат даты Sun May 11,2014 как я могу преобразовать его в 2014-05-11 в javascript.

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);

приведенный выше код дает мне тот же формат даты sun may 11,2014 пожалуйста, помогите

26 ответов


можно сделать

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/


просто использовать встроенный toISOString метод, который приводит вашу дату в формат ISO 8601.

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

где yourDate-ваш объект даты.


Я использую этот способ, чтобы получить дату в формате гггг-ММ-ДД :)

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

самый простой способ преобразовать дату в формат гггг-ММ-ДД, это сделать так:

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 )) преобразует дату в объект даты, соответствующий времени Sun May 11 2014 00:00:00 в UTC (стандартное время) путем вычитания часового пояса смещение
  • .toISOString() преобразует объект date в строку 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);

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

комбинация некоторых ответов:

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

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/


почему бы просто не использовать

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

простой и сладкий ;)


Я предлагаю использовать что-то вроде этого https://github.com/brightbits/formatDate-js вместо того, чтобы пытаться реплицировать его каждый раз, просто используйте библиотеку, которая поддерживает все основные действия strftime.

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

ни один из этих ответов не удовлетворил меня. Я хотел кросс-платформенное решение, которое дает мне день в локальном часовом поясе без использования каких-либо внешних библиотек.

вот что я придумал:

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

это должно вернуть День даты, в формате гггг-ММ-ДД, в часовом поясе ссылки на дату.

например localDay(new Date("2017-08-24T03:29:22.099Z")) вернутся "2017-08-23" хотя это уже 24-й в UTC.

вам нужно polyfill дата.прототип.toISOString для его работы в IE8, но он должен поддерживаться везде.


вы можете попробовать это: 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

надеюсь, это поможет вам!


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));

переформатирование строки даты довольно прямолинейно, например

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));

дата.js отлично подходит для этого.

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

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()));

Если у вас нет ничего против использования библиотек; вы можете просто использовать моменты.библиотека 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>

чтобы рассмотреть часовой пояс, этот лайнер должен быть хорош без какой-либо библиотеки:

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


Если дата должна быть одинаковой во всех часовых поясах, например, представляет некоторое значение из базы данных, то обязательно используйте версии utc дня, месяца, функции fullyear на объекте даты js, поскольку это будет отображаться в utc времени и избежать 1 ошибки в определенных часовых поясах. Еще лучше использовать момент.библиотека дат js для такого форматирования


еще одна комбинация ответов. Хорошо читается, но немного длинновато.

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);
}

Я изменил ответ 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);

легко выполняется my дата-шорткод:

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

некоторые из них выше были в порядке, но не были очень гибкими. Я хотел что-то, что действительно могло бы обрабатывать больше крайних случаев, поэтому я взял ответ @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');

вот один из способов сделать это:

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));

все данные ответы велики и помогли мне большой. В моей ситуации я хотел получить текущую дату в формате гггг мм dd вместе с датой-1. Вот что сработало для меня.

var endDate = new Date().toISOString().slice(0, 10); // To get the Current Date in YYYY MM DD Format

var newstartDate = new Date();
newstartDate.setDate(newstartDate.getDate() - 1);
var startDate = newstartDate.toISOString().slice(0, 10); // To get the Yesterday's Date in YYYY MM DD Format
alert(startDate);

это сработало для меня, и вы можете вставить это непосредственно в свой HTML, если это необходимо для тестирования:

<script type="text/javascript">
        if (datefield.type!="date"){ //if browser doesn't support input type="date", initialize date picker widget:
            jQuery(function($){ //on document.ready
                $('#Date').datepicker({
                    dateFormat: 'yy-mm-dd', // THIS IS THE IMPORTANT PART!!!
                    showOtherMonths: true,
                    selectOtherMonths: true,
                    changeMonth: true,
                    minDate: '2016-10-19',
                    maxDate: '2016-11-03'
                });
            })
        }
    </script>

просто используйте, как это определенно работает для гггг ММ ДД, как (2017-03-12)

var todayDate = новая дата ().ломтик(0,10);