Javascript: форматирование даты

1

Я хочу текущую дату/время, отформатированные в этом формате:

year+ '-' + месяц + '-' + день + '' + час + ':' + минута + ':' + second + ':' +milli;

В настоящее время я делаю это как таковой. Есть ли более элегантный подход без использования внешних библиотек, таких как moment.js?

var now     = new Date(); 
var year    = now.getFullYear();
var month   = now.getMonth()+1; 
var day     = now.getDate();
var hour    = now.getHours();
var minute  = now.getMinutes();
var second  = now.getSeconds(); 
var milli   = now.getMilliseconds();

if(month.toString().length == 1) {
var month = '0'+month;
}
if(day.toString().length == 1) {
var day = '0'+day;
}   
if(hour.toString().length == 1) {
var hour = '0'+hour;
}
if(minute.toString().length == 1) {
var minute = '0'+minute;
}
if(second.toString().length == 1) {
var second = '0'+second;
}   
if(milli.toString().length == 1) {
var milli = '0'+milli;
}   
var m_session_startTime =  year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+':'+milli;
  • 4
    Можете ли вы использовать внешнюю библиотеку, такую как moment.js?
  • 2
    month = ('0'+month).substr(-2); и т.п.
Показать ещё 9 комментариев
Теги:

4 ответа

0
Лучший ответ

Используйте вместо шаблонов литералы вместо конкатенации и padStart() чтобы заполнить padStart() нули.

const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, "0");
const day = String(now.getDate()).padStart(2, "0");
const hour = String(now.getHours()).padStart(2, "0");
const minute = String(now.getMinutes()).padStart(2, "0");
const second = String(now.getSeconds()).padStart(2, "0");
const milli = String(now.getMilliseconds()).padStart(4, "0");

const m_session_startTime = '${year}-${month}-${day} ${hour}:${minute}:${second}:${milli}';
console.log(m_session_startTime);
  • 0
    Можете ли вы опираться на ответ NotoriousPyro? Его самый элегантный из всех, но он не имеет правильного форматирования.
  • 1
    @etayluz В том-то и дело, что их ответ просто сбрасывает строку, возвращаемую toJSON() . Это не может быть улучшено без по- настоящему краткого анализа строк и манипуляций. Если вы хотите большей гибкости, вы должны получить все свойства с помощью методов, которые вы делали в начале, а затем объединить их.
0

Используйте moment.js. Отличная библиотека, предназначенная именно для вас. Вы можете использовать опцию.format.

var now = moment().format('YYYY-MM-DD HH:mm:ss.SSS');
$('#timeval').text(now);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Current Time: <br>
<a id="timeval"></a>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

https://momentjs.com/

  • 0
    ты забыл миллисекунды, хотя :)
  • 0
    @AltayAkkus хорошая мысль. Смотрите редактировать.
Показать ещё 1 комментарий
0

Вы можете использовать moment.js, это действительно поможет вам с датами форматирования.

console.log(moment().format('YYYY-MMMM-DD h:mm:ss:SSS'));
<script src="https://momentjs.com/downloads/moment.min.js"></script>

Эта команда выполняет работу довольно хорошо. moment() - объект даты, когда нет аргументов, приведенных в этом примере, оно принимает текущее время, но вы также можете использовать moment("2018-12-4") для определенных дат.

Затем вы можете отформатировать дату в соответствии с вашими потребностями,

ГГГГ - полный год (2018 год)

MMMM - это полное название месяца (июль)

(вы также можете использовать MMM для короткой версии имени месяца)

DD - это день как число (24)

(вы также можете использовать dddd для полного имени дня или ddd для короткого имени)

h - это час как число (22)

мм - это минута как число (23)

ss является вторым числом (как пример 22)

SSS - это миллисекунда как число (пример 245)

0

Попробуй это?

let date = new Date();
let jsonDate = date.toJSON();
jsonDate = jsonDate.replace(/[TZ]/g, " ");
jsonDate = jsonDate.replace(/\./g, ":");

console.log(jsonDate);

>  2018-07-24 20:32:06:435

Кроме того, если вы хотите разбить всю вещь на подстроки:

let date = new Date();
let jsonDate = date.toJSON();
jsonDate = jsonDate.replace(/[TZ]/g, " ");
jsonDate = jsonDate.replace(/\./g, ":");
let dateTime = jsonDate.split(" ");
let dt = dateTime[0].split("-");
let tt = dateTime[1].split(":");
let year = dt[0];
let month = dt[1];
let day = dt[2];
let hour = tt[0];
let minute = tt[1];
let second = tt[2];
let mili = tt[3];

console.log(jsonDate);
console.log(dateTime[0]);
console.log(dateTime[1]);
console.log([year, month, day, hour, minute, second, mili].join("~"));
console.log("Date: " + [year, month, day].join("-") + " Time: " + [hour, minute, second, mili].join(":"));

> 2018-07-24 21:03:05:706 
> 2018-07-24
> 21:03:05:706
> 2018~07~24~21~03~05~706
> Date: 2018-07-24 Time: 21:03:05:706

Как вы могли заметить из этого ответа, я работаю с базами данных. У меня тяжелый баш, javascript, php, sql, golang background.

  • 0
    это не его предпочтительный формат
  • 0
    Это такой крутой, короткий и приятный ответ, который не требует никаких внешних библиотек или зависимостей. Можете ли вы изменить, чтобы прийти к запрашиваемому формату?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню