Ответы:
Хотя в JS для этого достаточно основных инструментов, это довольно неуклюже.
/**
* You first need to create a formatting function to pad numbers to two digits…
**/
function twoDigits(d) {
if(0 <= d && d < 10) return "0" + d.toString();
if(-10 < d && d < 0) return "-0" + (-1*d).toString();
return d.toString();
}
/**
* …and then create the method to output the date string as desired.
* Some people hate using prototypes this way, but if you are going
* to apply this to more than one Date object, having it as a prototype
* makes sense.
**/
Date.prototype.toMysqlFormat = function() {
return this.getUTCFullYear() + "-" + twoDigits(1 + this.getUTCMonth()) + "-" + twoDigits(this.getUTCDate()) + " " + twoDigits(this.getUTCHours()) + ":" + twoDigits(this.getUTCMinutes()) + ":" + twoDigits(this.getUTCSeconds());
};
Date
объект. new Date().toMysqlFormat()
или new Date(2014,12,14).toMysqlFormat()
что-то еще.
toISOString
.
var date;
date = new Date();
date = date.getUTCFullYear() + '-' +
('00' + (date.getUTCMonth()+1)).slice(-2) + '-' +
('00' + date.getUTCDate()).slice(-2) + ' ' +
('00' + date.getUTCHours()).slice(-2) + ':' +
('00' + date.getUTCMinutes()).slice(-2) + ':' +
('00' + date.getUTCSeconds()).slice(-2);
console.log(date);
или даже короче:
new Date().toISOString().slice(0, 19).replace('T', ' ');
Вывод:
2012-06-22 05:40:06
Для более сложных случаев использования, включая управление часовым поясом, рассмотрите возможность использования http://momentjs.com/ :
require('moment')().format('YYYY-MM-DD HH:mm:ss');
Для легкой альтернативы momentjs, рассмотрите https://github.com/taylorhakes/fecha
require('fecha').format('YYYY-MM-DD HH:mm:ss')
var d = new Date(); d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
Я думаю, что решение может быть менее громоздким, если использовать метод toISOString()
, он имеет широкую совместимость с браузерами.
Таким образом, ваше выражение будет однострочным:
new Date().toISOString().slice(0, 19).replace('T', ' ');
Сгенерированный вывод:
«2017-06-29 17:54:04»
new Date(1091040026000).toISOString().slice(0, 19).replace('T', ' ');
Date
«ы часовой пояс . В то время как ваш возвращает базовое время UTC в формате MySQL DATETIME. В большинстве случаев лучше хранить UTC, и в любом случае ваша таблица данных, вероятно, должна содержать информацию о местоположении в одном поле. Кроме того, преобразовать в местное время довольно просто: используйте ... - Date.getTimezoneOffset() * 60 * 1000
(NB также настраивается на летнее время, где это применимо).
Значение времени JS для MySQL
var datetime = new Date().toLocaleString();
ИЛИ
const DATE_FORMATER = require( 'dateformat' );
var datetime = DATE_FORMATER( new Date(), "yyyy-mm-dd HH:MM:ss" );
ИЛИ
const MOMENT= require( 'moment' );
let datetime = MOMENT().format( 'YYYY-MM-DD HH:mm:ss.000' );
вы можете отправить это в параметрах, он будет работать.
Для произвольной строки даты
// Your default date object
var starttime = new Date();
// Get the iso time (GMT 0 == UTC 0)
var isotime = new Date((new Date(starttime)).toISOString() );
// getTime() is the unix time value, in milliseconds.
// getTimezoneOffset() is UTC time and local time in minutes.
// 60000 = 60*1000 converts getTimezoneOffset() from minutes to milliseconds.
var fixedtime = new Date(isotime.getTime()-(starttime.getTimezoneOffset()*60000));
// toISOString() is always 24 characters long: YYYY-MM-DDTHH:mm:ss.sssZ.
// .slice(0, 19) removes the last 5 chars, ".sssZ",which is (UTC offset).
// .replace('T', ' ') removes the pad between the date and time.
var formatedMysqlString = fixedtime.toISOString().slice(0, 19).replace('T', ' ');
console.log( formatedMysqlString );
Или однострочное решение,
var formatedMysqlString = (new Date ((new Date((new Date(new Date())).toISOString() )).getTime() - ((new Date()).getTimezoneOffset()*60000))).toISOString().slice(0, 19).replace('T', ' ');
console.log( formatedMysqlString );
Это решение также работает для Node.js при использовании Timestamp в mysql.
Первый ответ @Gajus Kuizinas, похоже, изменяет прототип mozilla toISOString
Почтенный DateJS библиотека имеет программу форматирования (переопределяет «.ToString ()»). Вы также можете сделать это самостоятельно, потому что методы Date дают вам все необходимые числа.
Полный обходной путь (для сохранения часового пояса) с использованием концепции ответа @Gajus:
var d = new Date(),
finalDate = d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
console.log(finalDate); //2018-09-28 16:19:34 --example output
новая дата (). toISOString (). slice (0, 10) + "" + новая дата (). toLocaleTimeString ('en-GB');
100% рабочий
Я привел простые примеры формата даты JavaScript, пожалуйста, проверьте приведенный ниже код.
var data = new Date($.now()); // without jquery remove this $.now()
console.log(data)// Thu Jun 23 2016 15:48:24 GMT+0530 (IST)
var d = new Date,
dformat = [d.getFullYear() ,d.getMonth()+1,
d.getDate()
].join('-')+' '+
[d.getHours(),
d.getMinutes(),
d.getSeconds()].join(':');
console.log(dformat) //2016-6-23 15:54:16
Использование momentjs
var date = moment().format('YYYY-MM-DD H:mm:ss');
console.log(date) // 2016-06-23 15:59:08
Пример, пожалуйста, проверьте https://jsfiddle.net/sjy3vjwm/2/
Самый простой правильный способ преобразовать JS Date в формат даты и времени SQL, который мне приходит в голову, - это этот. Он правильно обрабатывает смещение часового пояса.
const toSqlDatetime = (inputDate) => {
const date = new Date(inputDate)
const dateWithOffest = new Date(date.getTime() - (date.getTimezoneOffset() * 60000))
return dateWithOffest
.toISOString()
.slice(0, 19)
.replace('T', ' ')
}
toSqlDatetime(new Date()) // 2019-08-07 11:58:57
toSqlDatetime(new Date('2016-6-23 1:54:16')) // 2016-06-23 01:54:16
Помните, что ответ @Paulo Roberto приведет к неверным результатам в начале нового дня (я не могу оставлять комментарии). Например :
var d = new Date('2016-6-23 1:54:16'),
finalDate = d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
console.log(finalDate); // 2016-06-22 01:54:16
У нас 22 июня вместо 23!
var _t = new Date();
если вы хотите просто формат UTC
_t.toLocaleString('indian', { timeZone: 'UTC' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
или
_t.toISOString().slice(0, 19).replace('T', ' ');
и если хотите в определенном часовом поясе, тогда
_t.toLocaleString('indian', { timeZone: 'asia/kolkata' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
Я пользуюсь этим давно, и мне это очень помогает, используйте как хотите
Date.prototype.date=function() {
return this.getFullYear()+'-'+String(this.getMonth()+1).padStart(2, '0')+'-'+String(this.getDate()).padStart(2, '0')
}
Date.prototype.time=function() {
return String(this.getHours()).padStart(2, '0')+':'+String(this.getMinutes()).padStart(2, '0')+':'+String(this.getSeconds()).padStart(2, '0')
}
Date.prototype.dateTime=function() {
return this.getFullYear()+'-'+String(this.getMonth()+1).padStart(2, '0')+'-'+String(this.getDate()).padStart(2, '0')+' '+String(this.getHours()).padStart(2, '0')+':'+String(this.getMinutes()).padStart(2, '0')+':'+String(this.getSeconds()).padStart(2, '0')
}
Date.prototype.addTime=function(time) {
var time=time.split(":")
var rd=new Date(this.setHours(this.getHours()+parseInt(time[0])))
rd=new Date(rd.setMinutes(rd.getMinutes()+parseInt(time[1])))
return new Date(rd.setSeconds(rd.getSeconds()+parseInt(time[2])))
}
Date.prototype.addDate=function(time) {
var time=time.split("-")
var rd=new Date(this.setFullYear(this.getFullYear()+parseInt(time[0])))
rd=new Date(rd.setMonth(rd.getMonth()+parseInt(time[1])))
return new Date(rd.setDate(rd.getDate()+parseInt(time[2])))
}
Date.prototype.subDate=function(time) {
var time=time.split("-")
var rd=new Date(this.setFullYear(this.getFullYear()-parseInt(time[0])))
rd=new Date(rd.setMonth(rd.getMonth()-parseInt(time[1])))
return new Date(rd.setDate(rd.getDate()-parseInt(time[2])))
}
а потом просто:
new Date().date()
который возвращает текущую дату в формате MySQL
для добавления времени
new Date().addTime('0:30:0')
что добавит 30 минут .... и так далее