Ubah waktu tanggal JS menjadi waktu waktu MySQL


124

Apakah ada yang tahu bagaimana mengubah tanggal JS ke datetime MySQL? Juga apakah ada cara untuk menambahkan jumlah menit tertentu ke JS datetime dan kemudian meneruskannya ke MySQL datetime?

Jawaban:


89

Meskipun JS memiliki alat dasar yang cukup untuk melakukan ini, JS cukup kikuk.

/**
 * 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());
};

Bagaimana Anda memanggil fungsi seperti ini dengan variabel?
Catfish

1
@Catfish Maksud Anda dengan tanggal tertentu? Anda menggunakan Dateobjek. new Date().toMysqlFormat()atau new Date(2014,12,14).toMysqlFormat()atau apapun.
kojiro

17
Jawaban ini memiliki masanya sementara JavaScript sudah tua dan kikuk. Jika Anda menargetkan browser modern, saya merekomendasikan pendekatan GajustoISOString .
kojiro

320
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);

atau bahkan lebih pendek:

new Date().toISOString().slice(0, 19).replace('T', ' ');

Keluaran:

2012-06-22 05:40:06

Untuk kasus penggunaan yang lebih lanjut, termasuk mengontrol zona waktu, pertimbangkan untuk menggunakan http://momentjs.com/ :

require('moment')().format('YYYY-MM-DD HH:mm:ss');

Untuk alternatif yang ringan , pertimbangkan https://github.com/taylorhakes/fecha

require('fecha').format('YYYY-MM-DD HH:mm:ss')

Anda memiliki kurung buka tambahan sebelum date.getUTCDate, dan ya ini lebih baik.
Adam Lockhart

28
ini akan memberikan masalah karena zona waktu
Mr Coder

3
Ini membuang pengaturan zona waktu, bagaimana cara menyimpannya?
shapeare


3
Solusi lengkap dengan oneliner zona waktu !! var d = new Date(); d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
Paulo Roberto Rosa

78

Saya pikir solusinya bisa kurang kikuk dengan menggunakan metode toISOString(), ia memiliki kompatibilitas browser yang luas.

Jadi ekspresi Anda akan menjadi satu baris:

new Date().toISOString().slice(0, 19).replace('T', ' ');

Output yang dihasilkan:

"2017-06-29 17:54:04"


2
Bekerja dengan sangat baik! new Date(1091040026000).toISOString().slice(0, 19).replace('T', ' ');
Yohanes

6
Besar, hanya satu masalah di sini: metode yang lebih kikuk akan mendapatkan jam, hari, bulan (bahkan tahun) setelah penerapan js Date's offset zona waktu . Sedangkan milik Anda mengembalikan waktu UTC yang mendasari dalam format MySQL DATETIME. Dalam kebanyakan kasus, menyimpan UTC mungkin lebih baik, dan dalam kedua kasus tabel data Anda mungkin harus memberikan info lokasi dalam satu bidang. Alternatifnya, untuk mengubah ke waktu lokal cukup mudah: gunakan ... - Date.getTimezoneOffset() * 60 * 1000(NB juga menyesuaikan untuk Waktu Musim Panas jika berlaku).
mike rodent

14

Nilai waktu JS untuk MySQL

var datetime = new Date().toLocaleString();

ATAU

const DATE_FORMATER = require( 'dateformat' );
var datetime = DATE_FORMATER( new Date(), "yyyy-mm-dd HH:MM:ss" );

ATAU

const MOMENT= require( 'moment' );
let datetime = MOMENT().format( 'YYYY-MM-DD  HH:mm:ss.000' );

Anda dapat mengirim ini di params ini akan berhasil.


11

Untuk string tanggal arbitrer,

// 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 );

Atau solusi satu baris,

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 );

Solusi ini juga berfungsi untuk Node.js saat menggunakan Timestamp di mysql.

Jawaban pertama @Gajus Kuizinas tampaknya memodifikasi prototipe toISOString mozilla


4

Pustaka DateJS yang terhormat memiliki rutinitas pemformatan (itu menggantikan ".toString ()"). Anda juga dapat melakukannya sendiri dengan mudah karena metode "Tanggal" memberikan semua nomor yang Anda butuhkan.


4

Solusi lengkap (untuk mempertahankan zona waktu) menggunakan konsep jawaban @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

4

Tanggal baru (). toISOString (). slice (0, 10) + "" + Tanggal baru (). toLocaleTimeString ('en-GB');

100% bekerja


0

Saya telah memberikan contoh format tanggal JavaScript sederhana, silakan periksa kode di bawah ini

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

Menggunakan momentjs

var date = moment().format('YYYY-MM-DD H:mm:ss');

console.log(date) // 2016-06-23 15:59:08

Contoh silahkan cek https://jsfiddle.net/sjy3vjwm/2/


Saya baru saja mencoba kode pertama Anda dengan vanilla javascript dan hasilnya seperti ini: 2018-4-20 15:11:23. Anda tidak mengisi angka dengan awalan "0". Juga, saya tidak tahu tentang momentjs tetapi tidakkah Anda harus meletakkan "HH" selama berjam-jam sehingga itu sesuai? Mungkin itu sebabnya Anda turun memilih? (itwasntme)
Alex

0

Cara termudah yang benar untuk mengonversi JS Date ke format SQL datetime yang terjadi pada saya adalah yang ini. Ini menangani offset zona waktu dengan benar.

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

Berhati-hatilah karena jawaban @Paulo Roberto akan memberikan hasil yang salah pada saat pergantian hari (saya tidak bisa meninggalkan komentar). Contoh :

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 

Kami punya 22 Juni, bukan 23!


0
var _t = new Date();

jika Anda ingin format UTC sederhana

_t.toLocaleString('indian', { timeZone: 'UTC' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');

atau

_t.toISOString().slice(0, 19).replace('T', ' ');

dan jika ingin di zona waktu tertentu

_t.toLocaleString('indian', { timeZone: 'asia/kolkata' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');

0

Saya menggunakan waktu yang lama ini dan ini sangat membantu saya, gunakan sesuka Anda

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])))
}

dan kemudian:

new Date().date()

yang mengembalikan tanggal sekarang dalam 'format MySQL'

untuk menambah waktu adalah

new Date().addTime('0:30:0')

yang akan menambah 30 menit .... dan seterusnya

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.