Có ai biết làm thế nào để chuyển đổi ngày tháng của JS thành datetime của MySQL không? Ngoài ra có cách nào để thêm một số phút cụ thể vào datetime của JS và sau đó chuyển nó sang datetime của MySQL không?
Có ai biết làm thế nào để chuyển đổi ngày tháng của JS thành datetime của MySQL không? Ngoài ra có cách nào để thêm một số phút cụ thể vào datetime của JS và sau đó chuyển nó sang datetime của MySQL không?
Câu trả lời:
Mặc dù JS có đủ các công cụ cơ bản để làm việc này, nhưng nó khá là rắc rối.
/**
* 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
đối tượng. new Date().toMysqlFormat()
hoặc new Date(2014,12,14).toMysqlFormat()
bất cứ điều gì.
toISOString
phương pháp của Gajus .
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);
hoặc thậm chí ngắn hơn:
new Date().toISOString().slice(0, 19).replace('T', ' ');
Đầu ra:
2012-06-22 05:40:06
Đối với các trường hợp sử dụng nâng cao hơn, bao gồm kiểm soát múi giờ, hãy xem xét sử dụng http://momentjs.com/ :
require('moment')().format('YYYY-MM-DD HH:mm:ss');
Đối với một thay thế nhẹ cho khoảnh khắc, hãy xem xét 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];
Tôi nghĩ rằng giải pháp có thể ít cồng kềnh hơn bằng cách sử dụng phương pháp toISOString()
, nó có khả năng tương thích trình duyệt rộng.
Vì vậy, biểu hiện của bạn sẽ là một lót:
new Date().toISOString().slice(0, 19).replace('T', ' ');
Đầu ra được tạo:
"2017-06-29 17:54:04"
new Date(1091040026000).toISOString().slice(0, 19).replace('T', ' ');
Date
's múi giờ bù đắp . Trong khi đó của bạn trả về thời gian UTC cơ bản ở định dạng MySQL DATETIME. Trong hầu hết các trường hợp, việc lưu trữ UTC có thể tốt hơn và trong cả hai trường hợp, bảng dữ liệu của bạn có thể sẽ cung cấp thông tin vị trí trong một trường. Ngoài ra, để chuyển đổi sang giờ địa phương khá dễ dàng: sử dụng ... - Date.getTimezoneOffset() * 60 * 1000
(NB cũng điều chỉnh theo Giờ tiết kiệm ánh sáng ban ngày nếu có).
Giá trị thời gian JS cho MySQL
var datetime = new Date().toLocaleString();
HOẶC LÀ
const DATE_FORMATER = require( 'dateformat' );
var datetime = DATE_FORMATER( new Date(), "yyyy-mm-dd HH:MM:ss" );
HOẶC LÀ
const MOMENT= require( 'moment' );
let datetime = MOMENT().format( 'YYYY-MM-DD HH:mm:ss.000' );
bạn có thể gửi cái này trong params nó sẽ hoạt động.
Đối với chuỗi ngày tùy ý,
// 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 );
Hoặc một giải pháp dòng đơn,
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 );
Giải pháp này cũng hoạt động cho Node.js khi sử dụng Dấu thời gian trong mysql.
Câu trả lời đầu tiên của @Gajus Kuizinas dường như sửa đổi nguyên mẫu toISOString của mozilla
Cách giải quyết đầy đủ (để xác định múi giờ) bằng khái niệm câu trả lời @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
Ngày mới (). toISOString (). lát (0, 10) + "" + Ngày mới (). toLocaleTimeString ('en-GB');
Làm việc 100%
Tôi đã đưa ra các ví dụ định dạng ngày JavaScript đơn giản, vui lòng kiểm tra mã dưới đây
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
Sử dụng khoảnh khắc
var date = moment().format('YYYY-MM-DD H:mm:ss');
console.log(date) // 2016-06-23 15:59:08
Ví dụ vui lòng kiểm tra https://jsfiddle.net/sjy3vjwm/2/
Cách chính xác nhất dễ dàng nhất để chuyển đổi định dạng ngày tháng của SQL sang định dạng thời gian SQL xảy ra với tôi là cách này. Nó xử lý chính xác thời gian bù.
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
Coi chừng câu trả lời của @Paulo Roberto sẽ tạo ra kết quả không chính xác vào lượt vào ngày mới (tôi không thể để lại nhận xét). Ví dụ :
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
Chúng tôi đã có ngày 22 tháng 6 thay vì 23!
var _t = new Date();
nếu bạn muốn định dạng UTC đơn giản
_t.toLocaleString('indian', { timeZone: 'UTC' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
hoặc là
_t.toISOString().slice(0, 19).replace('T', ' ');
và nếu muốn trong múi giờ cụ thể thì
_t.toLocaleString('indian', { timeZone: 'asia/kolkata' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
Tôi đang sử dụng thời gian dài này và nó rất hữu ích cho tôi, sử dụng như bạn muốn
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])))
}
và sau đó chỉ:
new Date().date()
trong đó trả về ngày hiện tại ở 'định dạng MySQL'
để thêm thời gian là
new Date().addTime('0:30:0')
sẽ thêm 30 phút .... và cứ thế