Хто-небудь знає, як я можу прийняти datetimeзначення типу даних MySQL , наприклад, YYYY-MM-DD HH:MM:SSабо проаналізувати його або перетворити його на роботу у Date()функції JavaScript , наприклад: - Дата ("РРРР, ММ, DD, HH, MM, SS);
Дякую!
Хто-небудь знає, як я можу прийняти datetimeзначення типу даних MySQL , наприклад, YYYY-MM-DD HH:MM:SSабо проаналізувати його або перетворити його на роботу у Date()функції JavaScript , наприклад: - Дата ("РРРР, ММ, DD, HH, MM, SS);
Дякую!
Відповіді:
Деякі з наведених тут відповідей або є надскладними, або просто не спрацюють (принаймні, не у всіх браузерах). Якщо зробити крок назад, ви побачите, що часова мітка MySQL має кожен компонент часу в тому ж порядку, що і аргументи, необхідні Date()конструктору.
Все, що потрібно, - це дуже простий поділ на рядок:
// Split timestamp into [ Y, M, D, h, m, s ]
var t = "2010-06-09 13:12:01".split(/[- :]/);
// Apply each element to the Date function
var d = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));
console.log(d);
// -> Wed Jun 09 2010 14:12:01 GMT+0100 (BST)
Справедливе попередження: це передбачає, що ваш сервер MySQL виводить дати UTC (що є типовим і рекомендується, якщо немає компонента часового поясу рядка).
var d = new Date("2010-06-09 13:12:01");. Хоча що цікаво, у Chrome немає проблем з цим.
new Date(Date.UTC(...))стає неправильним протягом 24 годин ... тим краще, але це передбачає, що mysql використовує utc ... в будь-якому випадку це потрібно розглянутий до цього можна вважати правильною відповіддю.
Щоб додати до чудової відповіді Енді Е, функцією загального використання може бути:
Date.createFromMysql = function(mysql_string)
{
var t, result = null;
if( typeof mysql_string === 'string' )
{
t = mysql_string.split(/[- :]/);
//when t[3], t[4] and t[5] are missing they defaults to zero
result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);
}
return result;
}
Таким чином, задавши дату / час MySQL у формі "YYYY-MM-DD HH:MM:SS"або навіть коротку форму (тільки дата), "YYYY-MM-DD"ви можете:
var d1 = Date.createFromMysql("2011-02-20");
var d2 = Date.createFromMysql("2011-02-20 17:16:00");
alert("d1 year = " + d1.getFullYear());
new Date(Date.UTC(...))інших розумних, відповідь неправильна до 24 годин ...
Я думаю, що я, можливо, знайшов простіший спосіб, про який ніхто не згадував.
Стовпець DATETIME MySQL може бути перетворений в часову позначку unix через:
SELECT unix_timestamp(my_datetime_column) as stamp ...
Ми можемо створити новий об’єкт дати JavaScript, використовуючи конструктор, який потребує мілісекунд з епохи. Функція unix_timestamp повертає секунди з епохи, тому нам потрібно помножити на 1000:
SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...
Отримане значення може бути використане безпосередньо для створення правильного об'єкта Javascript Date:
var myDate = new Date(<?=$row['stamp']?>);
Сподіваюся, це допомагає.
Один вкладиш для сучасних браузерів (IE10 +):
var d = new Date(Date.parse("2010-06-09 13:12:01"));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)
І просто для розваги, ось один вкладиш, який працюватиме в старих браузерах (тепер виправлено):
new (Function.prototype.bind.apply(Date, [null].concat("2010-06-09 13:12:01".split(/[\s:-]/)).map(function(v,i){return i==2?--v:v}) ));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)
Останні версії JavaScript прочитають дату, відформатовану ISO8601, тому все, що вам потрібно зробити, - це змінити пробіл на 'T', зробивши щось подібне до наступного:
#MySQL
select date_format(my_date_column,'%Y-%m-%dT%T') from my_table;
#PHP
$php_date_str = substr($mysql_date_str,0,10).'T'.substr($mysql_date_str,11,8);
//JavaScript
js_date_str = mysql_date_str.substr(0,10)+'T'+mysql_date_str.substr(11,8);
Щоб ще більше додати рішення Марко. Я прототипував безпосередньо об'єкт String.
String.prototype.mysqlToDate = String.prototype.mysqlToDate || function() {
var t = this.split(/[- :]/);
return new Date(t[0], t[1]-1, t[2], t[3]||0, t[4]||0, t[5]||0);
};
Таким чином ви можете перейти безпосередньо до:
var mySqlTimestamp = "2011-02-20 17:16:00";
var pickupDate = mySqlTimestamp.mysqlToDate();
Є більш простий спосіб, рядок часової позначки sql:
2018-07-19 00:00:00
Найближчий до часової позначки формат Date () для отримання наступний, тому замініть порожній пробіл на "T":
var dateString = media.intervention.replace(/\s/g, "T");
"2011-10-10T14: 48: 00"
Потім створіть об’єкт дати:
var date = new Date(dateString);
Результатом буде об’єкт дати:
Чт 19 липня 2018 00:00:00 GMT-0300 (Horário Padrão de Brasília)
З відповіді Енді , для AngularJS - фільтр
angular
.module('utils', [])
.filter('mysqlToJS', function () {
return function (mysqlStr) {
var t, result = null;
if (typeof mysqlStr === 'string') {
t = mysqlStr.split(/[- :]/);
//when t[3], t[4] and t[5] are missing they defaults to zero
result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);
}
return result;
};
});
var a=dateString.split(" ");
var b=a[0].split("-");
var c=a[1].split(":");
var date = new Date(b[0],(b[1]-1),b[2],b[0],c[1],c[2]);
Спочатку ви можете надати об’єкту Date (класу) JavaScript новий метод "fromYMD ()" для перетворення формату дати YMD MySQL у формат JavaScript шляхом поділу формату YMD на компоненти та використання цих компонентів дати:
Date.prototype.fromYMD=function(ymd)
{
var t=ymd.split(/[- :]/); //split into components
return new Date(t[0],t[1]-1,t[2],t[3]||0,t[4]||0,t[5]||0);
};
Тепер ви можете визначити власний об’єкт (funcion у світі JavaScript):
function DateFromYMD(ymd)
{
return (new Date()).fromYMD(ymd);
}
і тепер ви можете просто створити дату з формату дати MySQL;
var d=new DateFromYMD('2016-07-24');
Ви можете використовувати часову позначку unix для спрямування:
SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;
Потім введіть epoch_time в JavaScript, і це просто питання:
var myDate = new Date(epoch_time * 1000);
Помноження на 1000 відбувається тому, що JavaScript займає мілісекунди, а UNIX_TIMESTAMP дає секунди.
Швидкий пошук у Google забезпечив це:
function mysqlTimeStampToDate(timestamp) {
//function parses mysql datetime string and returns javascript Date object
//input has to be in this format: 2007-06-05 15:26:02
var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
}
Чому б цього не зробити:
var d = new Date.parseDate( "2000-09-10 00:00:00", 'Y-m-d H:i:s' );