将 mySQL 日期转换为 Javascript 日期
Posted
技术标签:
【中文标题】将 mySQL 日期转换为 Javascript 日期【英文标题】:Convert a mySQL date to Javascript date 【发布时间】:2010-12-18 11:00:03 【问题描述】:将 mysql 日期格式日期转换为 javascript Date 对象的最佳方法是什么?
mySQL 日期格式为 'YYYY-MM-DD'(ISO 格式)。
【问题讨论】:
您有具体问题吗?你都尝试了些什么? AA您在将日期传递给 javascript Date 对象时遇到问题吗? Date.parse('2009-01-01');不起作用。试图找到一种方法来转换它。日期来自另一家公司的 json 对象,该对象以 ISO 格式返回日期。 【参考方案1】:鉴于您已澄清不能更改传入日期的格式,您需要这样的内容:
var dateParts = isoFormatDateString.split("-");
var jsDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2].substr(0,2));
原始回复:
您无法获得时间戳而不是日期字符串是否有原因?这将通过以下方式完成:
SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;
然后将 epoch_time 导入到 JavaScript 中,就很简单了:
var myDate = new Date(epoch_time * 1000);
乘以 1000 是因为 JavaScript 需要毫秒,而 UNIX_TIMESTAMP 是秒。
【讨论】:
我无权更改数据返回给我的方式。我有一个 ISO 格式的日期,我需要在客户端对其进行转换。【参考方案2】:最短快速的方法:
var mySQLDate = '2015-04-29 10:29:08';
new Date(Date.parse(mySQLDate.replace(/-/g, '/')));
【讨论】:
对我不起作用。我将替换语句更改为:replace(/[-]/g,'/')【参考方案3】:mySqlDate
的格式为“yyyy-mm-dd”。
var javaDate = new Date(mySqlDate);
这行代码对我来说很好用。
【讨论】:
这不适用于公元 100 年之前的日期。【参考方案4】:UNIX timestamp(自 1970 年 1 月 1 日以来的毫秒数)将是我的首选。
您可以将它作为整数传递,并使用 JS setTime() 方法从中生成 JS Date 对象。
【讨论】:
【参考方案5】:偶然发现这个希望完全符合 OP 的要求,并使用了 jhurshman 的答案,所以我 +1 了它,但它不完整,因为它将使用 00:00:00 GMT-0500 (CDT)
作为时间部分,因为它没有传递到日期对象(var jsDate)。
如果其他人想要创建完整的 Javascript
date object
例如:
Sat Mar 29 2014 23:24:28 GMT-0500 (CDT)
基于 MySQL DATETIME 格式
例如:
'9999-12-31 23:59:59'.
您将需要使用以下内容:
var dateParts = isoFormatDateString.split("-");
var jsDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2].substr(0, 2), dateParts[2].substr(3, 2), dateParts[2].substr(6, 2), dateParts[2].substr(9, 2));
它会在您创建日期对象时返回浏览器当前时区,但在大多数情况下我会在后端进行时区转换。
【讨论】:
【参考方案6】:以 AngularJS 方式,感谢@Jonas Sciangula Street
.filter('toJSDate', function()
return function (dateString)
return new Date(Date.parse(dateString.replace('-','/','g')))
;
)
【讨论】:
【参考方案7】:现在 javascript 可以轻松做到这一点,不再需要 moment.js 或类似的 :) 人类可读的语言和所需的语言。
var MySQLDate = '2021-01-26 16:35:00';
var JavaScriptDate1 = new Date(MySQLDate).toLocaleDateString(
'es-CO',
year: 'numeric',
month: 'long',
day: 'numeric',
hour12: true,
hour: '2-digit',
minute: '2-digit'
);
var JavaScriptDate2 = new Date(MySQLDate).toLocaleDateString(
'ko-KR',
year: 'numeric',
month: 'long',
day: 'numeric',
hour12: false,
hour: '2-digit',
minute: '2-digit'
);
console.log(JavaScriptDate1);
console.log(JavaScriptDate2);
See more info here
【讨论】:
【参考方案8】:您可以将日期'-'作为分隔符并使用此构造函数:
var d = new Date(Y, M - 1, D);
【讨论】:
我该如何拆分它? 如果 ds = 'YYYY-MM-DD': ds.split('-')【参考方案9】:以 Jhurisman 的回答为基础。如果您还想设置日期时间,请使用以下命令:
var dateParts = mysqlDate;
var timeParts = dateParts[2].substr(3).split(":");
var jsDate = new Date(
dateParts[0],
dateParts[1] - 1,
dateParts[2].substr(0,2),
timeParts[0],
timeParts[1],
timeParts[2]
);
【讨论】:
【参考方案10】:也许是这样的?
[Y,M,D,h,m,s] = '2020-11-06 16:00:00'.split(/[- :]/)
【讨论】:
【参考方案11】:这里是转换时间格式的函数。
function sqlToJsDate(sqlDate)
//sqlDate in SQL DATETIME format ("yyyy-mm-dd hh:mm:ss.ms")
var sqlDateArr1 = sqlDate.split("-");
//format of sqlDateArr1[] = ['yyyy','mm','dd hh:mm:ms']
var sYear = sqlDateArr1[0];
var sMonth = (Number(sqlDateArr1[1]) - 1).toString();
var sqlDateArr2 = sqlDateArr1[2].split(" ");
//format of sqlDateArr2[] = ['dd', 'hh:mm:ss.ms']
var sDay = sqlDateArr2[0];
var sqlDateArr3 = sqlDateArr2[1].split(":");
//format of sqlDateArr3[] = ['hh','mm','ss.ms']
var sHour = sqlDateArr3[0];
var sMinute = sqlDateArr3[1];
var sqlDateArr4 = sqlDateArr3[2].split(".");
//format of sqlDateArr4[] = ['ss','ms']
var sSecond = sqlDateArr4[0];
var sMillisecond = sqlDateArr4[1];
return new Date(sYear,sMonth,sDay,sHour,sMinute,sSecond,sMillisecond);
```
Reference:[DeepInTheCode][1]
[1]: https://deepinthecode.com/2014/08/05/converting-a-sql-datetime-to-a-javascript-date/
【讨论】:
【参考方案12】:你可以像这样简单的 javascript 获取 MySQL 日期(yyyy-mm-dd)
获取日期和时间
var date = new Date();
date.toISOString().slice(0, 19).replace('T', ' ');
只获取日期 yyyy-mm-dd
var date = new Date();
date.toISOString().slice(0, 10).replace('T', ' ');
如果您发现日期值有任何变化,请添加您的时区,例如
var date = new Date(date+" GTM"); //for GMT time zone
用你的代码调整它
【讨论】:
【参考方案13】:虽然 JS 确实拥有足够的基本工具来做到这一点,但使用起来非常简单
/**
* Ashu, 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();
Date.prototype.toMysqlFormat = function()
return this.getUTCFullYear() + "-" + twoDigits(1 + this.getUTCMonth()) + "-" + twoDigits(this.getUTCDate()) + " " + twoDigits(this.getUTCHours()) + ":" + twoDigits(this.getUTCMinutes()) + ":" + twoDigits(this.getUTCSeconds());
;
var date = new Date();
document.getElementById("date").innerhtml = date;
document.getElementById("mysql_date").innerHTML = date.toMysqlFormat();
console.log(date.toMysqlFormat());
Simple date:<div id="date"></div>
Converted Mysql Fromat: <div id="mysql_date"></div>
【讨论】:
【参考方案14】:function getJsDate(sqlDate)
var returnValue;
var timeString="00:00:00";
try
var dateArray=sqlDate.trim().split(" ");
var dateString=dateArray[0];
if(dateArray.length>1)timeString=dateArray[1];
console.log(timeString);
var yyyymmddArray=dateString.trim().split("-");
var hhmmssArray=timeString.trim().split(":");
returnValue = new Date(yyyymmddArray[0], (yyyymmddArray[1]-1), yyyymmddArray[2], hhmmssArray[0], hhmmssArray[1], hhmmssArray[2]);
catch(err)
console.log("Error: "+ err.message);
return returnValue;
【讨论】:
虽然此代码可以回答问题,但提供有关其解决问题的方式和原因的信息可提高其长期价值。【参考方案15】:具有正确类型的 TypeScript(无隐式字符串/int 对话):
/**
* @example
* mysql_date_to_js_date("2019-12-31");
*/
export function mysql_date_to_js_date(mysql_date: string)
var parts = mysql_date.split("-");
if (parts.length != 3)
return undefined;
var year = parseInt(parts[0]);
var month = parseInt(parts[1]) - 1; // months indexes are zero based, e.g. 9 == Octobre
var day = parseInt(parts[2]);
return new Date(year, month, day);
【讨论】:
以上是关于将 mySQL 日期转换为 Javascript 日期的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaScript 中将时间戳转换为 MySQL DateTime?
如何将 Javascript 日期时间转换为 C# 日期时间?
使用 Javascript 将 Excel 日期序列号转换为日期