我使用Date()
函数将MySQL Date转换为JS Date对象。
以下是我的操作方式的代码:
var a = "2019-03-12 12:30:03"; //MySQL Date
function MySQLToDate(dateString) {
if (typeof dateString === 'string') {
return new Date(dateString);
}
else {
return dateString; //in case the argument is already an object
}
}
alert(MySQLToDate(a));
//iOS Output: Invalid Date
//Normal Output: Tue Mar 12 2019 12:30:03 GMT+0530 (India Standard Time)
在我在iPad浏览器中对其进行测试之前,它的运行情况完全符合预期。
它在iOS中返回Invalid Date
。当然,使用Date()
的原型功能,例如getDate()
,getMonth()
等,返回Nan
。
因此,为了克服这种情况,我进行了研究,并在一个答案中发现,将MySQL日期直接传递到JS日期函数是错误的做法。 [Source]
现在我的代码如下:
var a = "2019-03-12 12:30:03"; //MySQL Date
function MySQLToDate(dateString) {
if (typeof dateString === 'string') {
return new Date(dateString.replace(" ","T"));
}
else {
return dateString; //in case the argument is already an object
}
}
alert(MySQLToDate(a));
//iOS Output: Tue Mar 12 2019 18:00:03 GMT+0530 (India Standard Time)
//Normal Output: Tue Mar 12 2019 12:30:03 GMT+0530 (India Standard Time)
此解决方案没有给出无效日期错误,而是从字面上给出了无效日期。
我还尝试将MySQL日期和年份,月份,日期,小时,分钟,秒分成Date()
,但是对象中的时间仍然错误。
非常欢迎您回答。
答案 0 :(得分:1)
您可以拆分字符串,然后使用Date的构造函数:
// Use this constructor
new Date(year, month, day, hours, minutes, seconds, milliseconds)
// code goes like this
let tokens = "2019-03-12 12:30:03".split(/[-: ]/g)
let date = new Date(tokens[0], parseInt(tokens[1]) -1, tokens[2], tokens[3], tokens[4], tokens[5]);
console.log(date);
此解决方案可在Safari,Chrome和Firefox浏览器中工作。
答案 1 :(得分:1)
您获得的“无效”时间看起来很像是“双重” IST时区日期。 IST =印度标准时间比格林威治标准时间(GMT + 5.5)早5.5小时(5小时30分钟)。
在解析/替换日期中的'T'
时,请确保在末尾添加一个'Z'
,以指示祖鲁时间。祖鲁时间与时区无关(UTC)。
return new Date(dateString.replace(" ","T") + "Z");
不确定iPad是否自行选择时区,但是无论哪种方式都没有指定任何时区,因此您可以根据自己的理解和喜好保留它。