Comments (8)
I am also facing the same issue.Can you please solve this issue asap.
from t-datepicker.
When timezone set to Us it doesn't work.Can you please solve this problem at the earliest
from t-datepicker.
Came across this library and it looked promising. Ran into this same issue. Glad it's not just me.
from t-datepicker.
I am also facing the same issue. I suggest please use moment js for solving date issue.
from t-datepicker.
hi all, i have solve this issue. using moment.js code mention below.
/*
- Tuds tDatepicker
- Copyright 2018 tuds - crazychicken
- Licensed under: LICENSE
- Version: v1.0.3
*/
;(function($){
'use strict';
// Init - Default options
var Defaults = {
// Action
autoClose : true,
durationArrowTop : 200,
// Theme
// Số tháng được hiển thị - mặc định 2 tháng
numCalendar : 2,
titleCheckIn : 'Check In',
titleCheckOut : 'Check Out',
titleToday : 'Today',
titleDateRange : 'night',
titleDateRanges: 'nights',
titleDays : [ 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su' ],
titleMonths : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', "December"],
titleMonthsLimitShow : 3,
replaceTitleMonths : null, // Thg
showDateTheme : null, // dd-mm-yy
iconArrowTop : true,
iconDate : '➜',
arrowPrev : '❮',
arrowNext : '❯',
// https://fontawesome.com/v4.7.0/icons/
// iconDate: '<i class="li-calendar-empty"></i><i class="li-arrow-right"></i>',
// arrowPrev: '<i class="fa fa-chevron-left"></i>',
// arrowNext: '<i class="fa fa-chevron-right"></i>',
toDayShowTitle : true, // true|false
dateRangesShowTitle : true, // true|false
dateRangesHover : true, // true|false
toDayHighlighted : false, // true|false
nextDayHighlighted : false, // true|false
daysOfWeekHighlighted: [0,6],
// ### ####
// FORMAT
// Quy định ngày hiển thị ra input value
// yyyy-dd-mm, yyyy-mm-dd, dd-mm-yyyy, mm-dd-yyyy
formatDate : 'yyyy-mm-dd',
// ### ####
// DATE
// Setup ngày t-check-in và ngày t-check-out khi đã có ngày, ngày t-check-out không được lớn hơn t-check-in - mặc định show ngày toDay
// dateCheckIn: '25/06/2018', // DD/MM/YY
// dateCheckOut: '26/06/2018', // DD/MM/YY
dateCheckIn : null,
dateCheckOut : null,
startDate : null,
endDate : null,
// Số tháng được next hoặc prev trong phạm vi show ra của calendar tính từ ngày toDay - mặc định next 12 tháng
limitPrevMonth : 0,
limitNextMonth : 11,
// Số ngày giới hạn của t-check-in -> t-check-out để thê hiện chuỗi .t-range
limitDateRanges : 31,
showFullDateRanges : false, // true -> full days || false - 1 day
// ### ###
// DATA HOLIDAYS
// Data holidays
fnDataEvent : null,
mergeDataEvent : false,
// ### ###
dateDisabled : []
};
var update_options;
$.fn.tDatePicker = function( pr_el, options ) {
// Get date Today
var d = new Date();
d.setHours(0, 0, 0, 0);
var toDay = d.valueOf();
// console.log(pr_el) // options first call
// Check update options and Methods, Object or string
if ( options === undefined && typeof(pr_el) !== 'string' ) {
update_options = pr_el;
if (typeof update_options.endDate == 'undefined') {
update_options.startDate.setHours(0, 0, 0, 0);
update_options.endDate = new Date(
new Date(update_options.startDate).setFullYear(update_options.startDate.getFullYear() + 1)
);
}
update_options.startDate.setHours(0, 0, 0, 0);
update_options.endDate.setHours(0, 0, 0, 0);
update_options.dateCheckIn.setHours(0, 0, 0, 0);
update_options.dateCheckOut.setHours(0, 0, 0, 0);
}
// Các giá trị update phải gán trước khi merge Object vì sử dụng convertFormatDf() format dd-mm-yyyy trước.
update_options.formatDate = update_options.formatDate || Defaults.formatDate;
// setStart là ngày đầu tiên của cuốn lịch, những ngày trước nó sẽ disbale,
// nếu không set giá trị default là toDay
// Nếu ko startDate thì sẽ lấy ngày toDay làm mặc định
// Khi setStart đựa vào limitNextMonth : 11, limitDateRanges: 31, để biết được ngày getEndDate
update_options.startDate = update_options.startDate || toDay;
if ( update_options.startDate === '' || update_options.startDate === 'null' ) {
update_options.startDate = toDay;
}
update_options.startDate = convertToDateIntegerValue(convertFormatDf(update_options.startDate))
var sd = new Date(update_options.startDate);
sd.setHours(0, 0, 0, 0);
var nextDay = new Date(sd.getFullYear(), sd.getMonth(), sd.getDate() + 1).valueOf(); // UTC
if ( pr_el === 'setStartDate' && typeof(pr_el) === 'string' ) {
update_options.startDate = convertToDateIntegerValue(convertFormatDf(options))
}
if ( pr_el === 'setEndDate' && typeof(pr_el) === 'string' ) {
update_options.endDate = convertToDateIntegerValue(convertFormatDf(options))
}
// Check giá trị truyền vào phải là ngày nếu === null or empty thì trả về null
if ( update_options.dateCheckIn === ''
|| update_options.dateCheckIn === 'null' ) {
update_options.dateCheckIn = null;
}
if ( update_options.dateCheckOut === ''
|| update_options.dateCheckOut === 'null' ) {
update_options.dateCheckOut = null;
}
if ( update_options.endDate === ''
|| update_options.endDate === 'null' ) {
update_options.endDate = null;
}
if ( options !== undefined ) {
update_options.numCalendar = update_options.numCalendar || 2;
var num_Limit = update_options.limitDateRanges || 31;
var num_month_Limit = update_options.limitNextMonth || 11;
// get endDate Calendar phụ thuộc vào số lượng numCalendar được show và nextMonth
var limitEndDate = new Date ( sd.getFullYear(), sd.getMonth() + update_options.numCalendar + num_month_Limit - 1, sd.getDate());
limitEndDate = convertToDateIntegerValue(convertFormatDf(limitEndDate))
// Update for CI - CO
if ( pr_el === 'update' ) {
// update_options.dateCheckIn = convertToDateIntegerValue(convertFormatDf(options[0]));
// update_options.dateCheckOut = convertToDateIntegerValue(convertFormatDf(options[1]));
// Update for CI - CO
if ( options.length === 2 ) {
checkCI(options[0]);
checkCO(options[1]);
} else {
// Update for CI
checkCI(options);
}
if ( options === '' ) {
update_options.dateCheckIn = null;
update_options.dateCheckOut = null;
}
}
// Update only for CI
if ( pr_el === 'updateCI' ) {
checkCI(options);
}
// Update only for CO
if ( pr_el === 'updateCO' ) {
checkCO(options)
}
}
// Update for CI
function checkCI( pr_options ) {
// Xét default khi CI = ''
if ( pr_options === '') {
update_options.dateCheckIn = null;
update_options.dateCheckOut = null;
return;
}
var CI = convertToDateIntegerValue(convertFormatDf(pr_options));
var date = moment(CI).clone()._d;
var dateLimit = new Date(date.getFullYear(), date.getMonth(), date.getDate() + num_Limit);
dateLimit.setHours(0, 0, 0, 0);
dateLimit = convertToDateIntegerValue(convertFormatDf(dateLimit))
var op_CO = convertToDateIntegerValue(convertFormatDf(update_options.dateCheckOut));
// - update CI nhỏ hơn update_options.startDate thì lấy ngày update_options.startDate
update_options.dateCheckIn = CI;
if ( CI < update_options.startDate ) {
update_options.dateCheckIn = update_options.startDate;
}
// Set day CI lớn hơn limit day trả về ngày cuối cùng
if ( CI > limitEndDate ) {
update_options.dateCheckIn = limitEndDate;
}
// - update CI lớn hơn hoặc = CO thì lấy ngày update CO = null
if ( CI >= op_CO || op_CO > dateLimit ) {
update_options.dateCheckOut = null;
}
}
// Update for CO
function checkCO( pr_options ) {
var op_CI = convertToDateIntegerValue(convertFormatDf(update_options.dateCheckIn));
// Bắt buộc phải có CI
// - update CO nhỏ hơn CI thì CO = null -> CI = ngày hiện tại
// - update CO không được === CI
// - update CO không được lớn hơn limitDateRanges
// Xét default khi CO = ''
if ( pr_options === '' ) {
update_options.dateCheckIn = op_CI;
if ( isNaN(op_CI) ) {
update_options.dateCheckIn = null;
}
update_options.dateCheckOut = null;
return;
}
var CO = convertToDateIntegerValue(convertFormatDf(pr_options));
var date = moment(CO).clone()._d;
var CO_dateLimit = new Date(date.getFullYear(), date.getMonth(), date.getDate()-num_Limit);
CO_dateLimit = convertToDateIntegerValue(convertFormatDf(CO_dateLimit))
// Lớn hơn ngày giới hạn
if ( CO > limitEndDate ) {
update_options.dateCheckOut = limitEndDate;
update_options.dateCheckIn = CO_dateLimit;
return;
}
if ( CO > update_options.startDate ) {
// Set day CI lớn hơn limit day trả về ngày cuối cùng
// Gọi lần đầu chưa có CI
if ( update_options.dateCheckIn === undefined || update_options.dateCheckIn === null ) {
update_options.dateCheckOut = CO;
// Cố định chọn CI
if ( update_options.startDate > CO_dateLimit ) {
update_options.dateCheckIn = update_options.startDate;
} else {
update_options.dateCheckIn = CO_dateLimit;
}
} else {
// Đã có CI
// update_options.startDate 10/10 - CO_dateLimit-31 = 15/10
update_options.dateCheckOut = CO;
// Nằm trong phạm vi limitDateRanges - default 31 ngày
// update_options.startDate đến CO là 31 ngày
if ( update_options.startDate > CO_dateLimit ) {
// Cần xác định CI luôn luôn = CI chỉ = update_options.startDate khi CO < CI
update_options.dateCheckIn = op_CI;
if ( CO < op_CI ) {
update_options.dateCheckIn = update_options.startDate;
}
} else {
// Vượt khỏi phạm vi limitDateRanges - default 31 ngày so với update_options.startDate
// Vượt khỏi 31 ngày mà CO > CI - vẫn còn ngày CI
if ( op_CI > CO_dateLimit ) {
update_options.dateCheckIn = op_CI;
} else {
update_options.dateCheckIn = CO_dateLimit;
}
// Vượt khỏi 31 ngày mà CO < CI - không có CI, xác định CI
if ( op_CI > CO ) {
update_options.dateCheckIn = CO_dateLimit;
}
}
}
} else {
update_options.dateCheckIn = update_options.startDate;
update_options.dateCheckOut = nextDay;
}
}
// Update data date for methods 'show', 'hide', startDate
// getDate, getDateUTC, getDateInput để trước để get được cả giá trị chưa có là 'null'
var findValueCI = this.find('.t-input-check-in').val();
var findValueCO = this.find('.t-input-check-out').val();
if (typeof(pr_el) === 'string' ) {
if ( pr_el === 'show' || pr_el === 'hide' ) {
if ( findValueCI !== 'null' ) {
update_options.dateCheckIn = findValueCI;
}
if ( findValueCO !== 'null' ) {
update_options.dateCheckOut = findValueCO;
}
}
// Method getDate, getDateUTC, getDateInput ...
// Nếu CI không có giá trị, set từng methods để trả về kết quả null or [null, null]
if ( findValueCI === 'null' ) {
if ( pr_el === 'getDate' || pr_el === 'getDateInput' || pr_el === 'getDateUTC' ) {
return null;
}
if ( pr_el === 'getDates' || pr_el === 'getDateInputs' || pr_el === 'getDateUTCs' ) {
return [null, null];
}
}
// Nếu CI có giá trị, set từng methods để trả về kêt quả cụ thể:
if ( findValueCI !== 'null' ) {
if ( findValueCO === 'null' ) {
if ( pr_el === 'getDates' ) {
return [moment(findValueCI).clone()._d, null]
}
if ( pr_el === 'getDateInputs' ) {
return [findValueCI, null]
}
if ( pr_el === 'getDateUTCs' ) {
var d_CI = convertToDateIntegerValue(convertFormatDf(findValueCI));
return [d_CI, null]
}
}
// getDate
if ( pr_el === 'getDate' ) {
return moment(findValueCI).clone()._d
}
if ( pr_el === 'getDates' ) {
return [moment(findValueCI).clone()._d, moment(findValueCO).clone()._d]
}
// getDateInput
if ( pr_el === 'getDateInput' ) {
return findValueCI;
}
if ( pr_el === 'getDateInputs' ) {
return [findValueCI, findValueCO]
}
// getDate
if ( pr_el === 'getDateUTC' ) {
return convertToDateIntegerValue(convertFormatDf(findValueCI));
}
if ( pr_el === 'getDateUTCs' ) {
var d_CI = convertToDateIntegerValue(convertFormatDf(findValueCI));
var d_CO = convertToDateIntegerValue(convertFormatDf(findValueCO));
return [d_CI, d_CO]
}
}
}
// ### ###
// ### MERGE OBJECT MAIN OPTIONS DEFAULT ####
var this_el = this;
var settings = $.extend({}, Defaults, update_options);
// ### ###
// Check Number
settings.durationArrowTop = Number(settings.durationArrowTop)
settings.limitPrevMonth = Number(settings.limitPrevMonth)
settings.limitNextMonth = Number(settings.limitNextMonth)
settings.numCalendar = Number(settings.numCalendar)
settings.limitDateRanges = Number(settings.limitDateRanges)
settings.titleMonthsLimitShow = Number(settings.titleMonthsLimitShow)
settings.autoClose = settings.autoClose;
if (this_el.hasClass("t-datepicker-autoclose-true")) {
settings.autoClose = true;
}
if (this_el.hasClass("t-datepicker-autoclose-false")) {
settings.autoClose = false;
}
// Get Start Date and get End Date để sau Object settings là vì phải chờ có giá trị mà lấy
if ( typeof(pr_el) === 'string' ) {
// getStartDate
var get_startDate = settings.startDate || settings.dateCheckIn;
if ( pr_el === 'getStartDate' ) {
return new Date(get_startDate)
}
if ( pr_el === 'getStartDateUTC' ) {
return convertToDateIntegerValue(convertFormatDf(get_startDate))
}
// getEndDate
var get_endDate = settings.endDate || new Date ( sd.getFullYear(), sd.getMonth() + settings.numCalendar + settings.limitNextMonth - 1, sd.getDate());
if ( pr_el === 'getEndDate' ) {
return moment(get_endDate).clone()._d;
}
if ( pr_el === 'getEndDateUTC' ) {
return convertToDateIntegerValue(convertFormatDf(get_endDate));
}
}
// FUNCTION UTILITY
// Check number first 0 - 01, 02, 03 ....
function check_num_10(pr_el) {
if ( pr_el < 10 ) {
return pr_el = '0' + pr_el
} else {
return pr_el;
}
}
function convertArrayToString(pr_array) {
pr_array = pr_array.toString();
pr_array = pr_array.replace(/,/g, '');
return pr_array;
}
// Function Parents
function fnParents(pr_el_parent, pr_el_class) {
var i = 0;
while ( pr_el_parent.className.match(pr_el_class) === null ) {
if ( pr_el_parent.className === pr_el_class ) {
return pr_el_parent;
}
if ( pr_el_parent.nodeName === 'HTML' ) {
return pr_el_parent;
}
pr_el_parent = pr_el_parent.parentElement;
// Kiểm tra phần tử, alert không có element bên ngoài thì set default DOM ROOT
if ( pr_el_parent === null ) {
return document.body.parentElement;
}
// check stop while
i++; if (i>500) {return;}
// return pr_el_parent;
}
return pr_el_parent;
}
// Function Append for toDay, hover day show num night
function appendSpan(pr_el, pr_class, pr_class_span, pr_text_node) {
if ( pr_class != '' ) {
pr_el.className = pr_el.className + ' ' + pr_class;
} else {
pr_el.className = pr_el.className + pr_class;
}
var node = document.createElement("span");
node.className = pr_class_span;
var textnode = document.createTextNode(pr_text_node);
node.appendChild(textnode);
pr_el.appendChild(node)
}
// GLOBAL VARIABLE
// var aDays = [ 'T2', 'T3', 'T4', 'T5', 'T6', 'T7', 'CN' ];
var aDays = settings.titleDays;
// var aMonths = ['Tháng 01', 'Tháng 02', 'Tháng 03', 'Tháng 04', 'Tháng 05', 'Tháng 06', 'Tháng 07', 'Tháng 08', 'Tháng 09', 'Tháng 10', 'Tháng 11', "Tháng 12"]
// [ 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su' ];
// Theme Function set type day of week
function setDayOfWeek () {
for ( var i = 0; i < aDays.length; i++ ) {
if ( aDays[i].indexOf('<th>') === -1 ) {
aDays[i] = '<th>'+aDays[i]+'</th>';
} else {
aDays[i] = aDays[i];
}
}
return convertArrayToString(aDays)
}
// Theme Function get HTML TABLE for calendar
var setTemplate = '<div class="t-table-wrap"><table class="t-table-condensed">'+
'<thead>'+
'<tr>'+
'<th class="t-arrow t-prev">'+settings.arrowPrev+'</th>'+
'<th colspan="5" class="t-month"></th>'+
'<th class="t-arrow t-next">'+settings.arrowNext+'</th>'+
'</tr>'+
'<tr>'+
setDayOfWeek()+
'</tr>'+
'</thead>'+
'<tbody></tbody>'+
'</table></div>'
// console.log(setTemplate)
// options add theme
var numCalendar = settings.numCalendar;
// if ( numCalendar < 1 || isNaN( numCalendar )) {
// return console.log("'Thank you for using t-datepicker. Please, check numCalendar :'%c " + numCalendar + ' ', 'background: #f16d99; color: #fff');
// }
// .t-datepicker-days options have only one calendar
var checkNumCalendar = '';
if ( Number(numCalendar) > 1 ) {
var checkNumCalendar = ' t-datepicker-days'
}
var dataTheme = [];
var setNumTheme = numCalendar;
while ( setNumTheme > 0 ) {
dataTheme.push(setTemplate);
setNumTheme--;
}
// Reset variable code 0,1,2,3 ...
numCalendar = numCalendar - 1;
// Theme Append html follow month tr > td dataDays/7
function AppendDaysInMonth(pr_num) {
var i = 0;
var setTr = '';
while ( i < pr_num ) {
setTr = setTr + '<tr>'+
'<td class="t-day">1</td>'+
'<td class="t-day">2</td>'+
'<td class="t-day">3</td>'+
'<td class="t-day">4</td>'+
'<td class="t-day">5</td>'+
'<td class="t-day">6</td>'+
'<td class="t-day">0</td>'+
'</tr>';
i++;
}
return setTr;
}
// Theme t-check-in && t-check-out default show for website
function setThemeCheckDate(pr_title, pr_class, pr_data_utc, pr_input, pr_fm_input) {
return '<div class="t-dates t-date-'+pr_class+'">'+
// setInfoTitle(pr_title, 't-date-info-title')
settings.iconDate+
'<label class="t-date-info-title">'+pr_title+'</label>'+
showThemeDate(pr_class, pr_data_utc)+
'</div>'+
'<input type="hidden" class="t-input-'+pr_class+'"'+' value="'+pr_fm_input+'" name="'+pr_input+'">'
// +'<div class="datepicker"></div>'
}
function showThemeDate(pr_class, pr_data_utc) {
// console.log("nnnnnnnnnnn=" + typeof pr_data_utc);
if (pr_data_utc !== 0 && pr_data_utc !== null && isNaN(pr_data_utc) == false) {
var d = moment(pr_data_utc).clone()._d;
var showMonths = settings.titleMonths[d.getMonth()].slice(0, settings.titleMonthsLimitShow); // 19 Jul 2018
// Chỉnh sửa lại Tháng muốn hiển thị tự custom - 'Tháng'
if ( settings.replaceTitleMonths !== null ) {
showMonths = settings.replaceTitleMonths +' '+ check_num_10(d.getMonth() + 1);
}
// Set hiển thị chỉ có dd/mm hoặc dd/mm/yy không đổi formatShow
if ( settings.showDateTheme === 'dd' ) {
return '<span class="t-day-'+pr_class+'"> ' + check_num_10(d.getDate()) +'</span>'
} else if ( settings.showDateTheme === 'dd/mm' || settings.showDateTheme === 'dd-mm' ) {
return '<span class="t-day-'+pr_class+'"> ' + check_num_10(d.getDate()) +'</span>'+
'<span class="t-month-'+pr_class+'"> '+ showMonths +' </span>'
} else {
return '<span class="t-day-'+pr_class+'"> ' + check_num_10(d.getDate()) +'</span>'+
'<span class="t-month-'+pr_class+'"> '+ showMonths +' </span>'+
'<span class="t-year-'+pr_class+'"> '+check_num_10(d.getFullYear()) +'</span>'
}
} else {
return '';
}
}
// fn convert date_utc 2018/02/27 -> 1519689600000 // YY/MM/DD
function convertToDateIntegerValue(pr_date_utc) {
if (typeof pr_date_utc == "string") {
if (pr_date_utc.indexOf("-") != -1) {
pr_date_utc = moment(pr_date_utc).format("YYYY/MM/DD");
}
}
var date = moment(pr_date_utc).clone()._d;
var date_utc = date.getTime();
if (date_utc === 0) { date_utc = null };
// console.log("pr_date_utc=" + pr_date_utc + "moment=" + moment(date_utc).format("YYYY-MM-DD") + "date_utc=" + date_utc + " +moment=" + moment(date_utc).format("YYYY-MM-DD"));
return date_utc;
}
function convertFormatDf(pr_date) {
if (typeof (pr_date) === 'object' && pr_date !== null) {
//console.log("pr_date" + pr_date);
return pr_date = convertToDateIntegerValue(pr_date)
}
if (typeof (pr_date) === 'string' && pr_date !== 'null') {
var yyyy_mm_dd;
if ( pr_date.indexOf('/') !== -1 ) { pr_date = pr_date.replace(/\//g, '-') }
var dd = pr_date.split('-');
// yyyy phải là 4 số trở lên, tháng không được lớn hơn 13
// Giá trị từ input mm-dd-yyyy chuyển đổi thành yyyy-mm-dd
if ( update_options.formatDate === 'mm-dd-yyyy'
&& dd[2].length === 4 && dd[0] < 13 ) {
// console.log('mm-dd-yyyy')
yyyy_mm_dd = dd[2]+'-'+dd[0]+'-'+dd[1];
}
if ( update_options.formatDate === 'dd-mm-yyyy'
&& dd[2].length === 4 && dd[1] < 13 ) {
// console.log('dd-mm-yyyy')
yyyy_mm_dd = dd[2]+'-'+dd[1]+'-'+dd[0];
}
// Giá trị từ input yyyy-dd-mm chuyển đổi thành yyyy-mm-dd
if ( update_options.formatDate === 'yyyy-dd-mm'
&& dd[0].length === 4 && dd[2] < 13 ) {
// console.log('yyyy-dd-mm')
yyyy_mm_dd = dd[0]+'-'+dd[2]+'-'+dd[1];
}
// Giá trị từ input mm-dd-yyyy chuyển đổi thành yyyy-mm-dd
// [yyyy, mm, dd]
if ( update_options.formatDate === 'yyyy-mm-dd'
&& dd[0].length === 4 && dd[1] < 13 ) {
// console.log('mm-dd-yyyy')
yyyy_mm_dd = dd[0]+'-'+dd[1]+'-'+dd[2];
}
// Gọi sai format là return;
if ( isNaN(new Date(yyyy_mm_dd)) ) {
return console.log("'Thank you for using t-datepicker. Please, check formatDate :'%c " + settings.formatDate + ' ', 'background: #f16d99; color: #fff');
}
return yyyy_mm_dd; // Convert String '25/06/2018' - '2018/06/25'
}
return pr_date; // convert date_utc 2018/02/27 -> 1519689600000 -> Number
}
// Kiểm tra giá trị để show ra input là dd-mm-yyyy
function showValueInput(pr_date) {
if ( pr_date !== null ) {
var d = moment(pr_date).clone()._d;
// dd-mm-yyyy
pr_date = check_num_10(d.getDate())+'-'+(check_num_10(d.getMonth()+1))+'-'+d.getFullYear();
if ( settings.formatDate === 'mm-dd-yyyy' ) {
pr_date = (check_num_10(d.getMonth()+1))+'-'+check_num_10(d.getDate())+'-'+d.getFullYear();
}
if ( settings.formatDate === 'yyyy-dd-mm') {
pr_date = d.getFullYear()+'-'+check_num_10(d.getDate())+'-'+(check_num_10(d.getMonth()+1));
}
if ( settings.formatDate === 'yyyy-mm-dd') {
pr_date = d.getFullYear()+'-'+(check_num_10(d.getMonth()+1))+'-'+check_num_10(d.getDate());
}
}
return pr_date;
}
// Function get && show default theme for website include (2018/02/27 || 1519689600000)
function getDateUTC(pr_in, pr_out) {
var Array_In_Out = ['check-in', 'check-out'];
Array_In_Out.forEach( function(e) {
var label_title = settings.titleCheckIn;
var getDay = pr_in;
var Input = 't-start'
// Check CI có giá trị ngày thì remove label Nhận Phòng
if ( pr_in !== null ) {
label_title = '';
}
if ( e === 'check-out' ) {
label_title = settings.titleCheckOut;
getDay = pr_out;
// Giá trị CI lớn hơn 30 day giới hạn, lớn hơn ngày CO nếu đã có CO -> CO sẽ không có chọn ngày ở dates
// Null không có add dates và Dom
if ( pr_in === pr_out ) {
getDay = null;
} else if ( pr_out !== null ) {
label_title = ''; // Xoá title khi có giá trị
}
Input = 't-end'
}
// console.log(getDay)
getDay = convertFormatDf(getDay)
var formatDate = showValueInput(getDay);
// console.log(getDay)
getDay = convertToDateIntegerValue(getDay);
this_el.find('.t-'+e).html(setThemeCheckDate( label_title , e, getDay, Input, formatDate ))
})
// Nếu không có data, data default sẽ là toDay và nextDays - null
if ( pr_in === null && pr_out === null ) {
pr_in = settings.startDate;
// next Day form dataCheckIn
var date = moment(pr_in).clone()._d;
pr_out = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1).valueOf();
// console.log('a')
}
if ( pr_in !== null && pr_out !== null ) {
// Có data, mà CO < CI thì đưa check CO = CI
if ( convertToDateIntegerValue(convertFormatDf(pr_in)) > convertToDateIntegerValue(convertFormatDf(pr_out)) ) {
pr_in = pr_out;
// console.log('b')
}
}
// Nếu CI có giá trị mà CO không có thì gôm chung là 1
if ( pr_in !== null && pr_out === null ) {
pr_out = pr_in;
// console.log('c')
}
// Nếu CO có giá trị mà CI không có thì CI = CO
if ( pr_in === null && pr_out !== null ) {
pr_in = pr_out;
// console.log('d')
}
// Giá trị CI lớn hơn 30 day giới hạn, lớn hơn ngày CO nếu đã có CO -> CO sẽ không có chọn ngày ở dates
// if ( pr_in === pr_out ) {
// $('.year-check-out').remove();
// $('.month-check-out').remove();
// $('.day-check-out').remove();
// }
// Convert String '25/06/2018' - '29/06/2018'
pr_in = convertFormatDf(pr_in)
pr_out = convertFormatDf(pr_out)
// convert date_utc 2018/02/27 -> 1519689600000 // YY/MM/DD -> Number
return [convertToDateIntegerValue(pr_in), convertToDateIntegerValue(pr_out)];
}
var dataUTC = getDateUTC(settings.dateCheckIn, settings.dateCheckOut);
// Nhận vào Elements [dates], date_utc = [1,2]
function setDaysInMonth ( pr_el, pr_data_utc ) {
// pr_el.parentElement.getElementsByClassName('datepicker')[0].innerHTML = convertArrayToString(dataTheme);
// pr_el <=> this, define event for each calendar
var tswitch = pr_el.find('.t-month');
if ( numCalendar >= 0 ) {
for ( var i_num = 0; i_num <= numCalendar; i_num++) {
// Call title month
var date = new Date(pr_data_utc);
date.setHours(0, 0, 0, 0);
var newDate = new Date(date.getFullYear(), (date.getMonth() + i_num));
// tswitch[i_num].innerHTML = 'Tháng ' + (newDate.getMonth() + 1) + ' ' + newDate.getFullYear();
tswitch[i_num].innerHTML = settings.titleMonths[newDate.getMonth()] + ' ' + newDate.getFullYear();
// Global data days
var dataDays = [];
var dataUTCDate = [];
var days = [];
// Call data Next month follow number calendar
var nextDate = new Date(date.getFullYear(), (date.getMonth() + i_num)).valueOf();
var date = moment(nextDate).clone()._d;
while (new Date(date.getFullYear(), (date.getMonth())).valueOf() === nextDate) {
days.push(date.getDay()); // Day of week 0 - 6 tìm được vị trí ngày đầu tiên và cuối cùng trong tháng
dataDays.push(date.getDate()); // Day of month 1 -31 tìm được số ngày của 1 tháng
dataUTCDate.push(new Date(date.getFullYear(), date.getMonth(), date.getDate()).valueOf()); // Number day ex: 1519257600000
date.setDate(date.getDate() + 1); // So sánh số ngày của tháng
}
// console.log(days)
// var days = [
// 0, // 1
// 1,2,3,4,5,6,0, // 2
// 1,2,3,4,5,6,0, // 2
// 1,2,3,4,5,6,0, // 3
// 1,2,3,4,5,6,0, // 4
// 1,2,3,4,5,6,0, // 5
// 1 // 6
// ]
// console.log(days)
// Set Days before min in month
var beforeDay = days[0];
if ( beforeDay === 0 ) {
while ( beforeDay < 6 ) {
dataDays.unshift('');
dataUTCDate.unshift('');
beforeDay++;
}
} else {
while ( beforeDay > 1 ) {
dataDays.unshift('');
dataUTCDate.unshift('');
beforeDay--;
}
}
// Set Days after max in month
var afterDay = days[days.length-1];
while ( afterDay < 7 ) {
dataDays.push('');
dataUTCDate.push('');
afterDay++;
}
setThemeData(dataDays, dataUTCDate, i_num, pr_el)
}
}
// console.log(pr_data_utc)
// Nhận vào Elements [dates], date_utc = [1,2]
getStyleDays( pr_el, pr_data_utc );
}
// Function setTheme show tablet date follow numCalendar 1,2,3 ...
function setThemeData (dataDays, dataUTCDate, pr_num, pr_el) {
var checkdataDays = dataDays.slice(-7)[0] // Kiểm tra tháng có ngày cuối cùng là 30 và 7 "" empty
if ( checkdataDays === '' ) {
dataDays = dataDays.slice(0, -7) // Clear 7 empty
}
var getTH = pr_el.find('tbody')
getTH[pr_num].innerHTML = AppendDaysInMonth(Math.round(dataDays.length/7));
var getTD = getTH[pr_num].querySelectorAll('td')
for ( var td = 0; td < getTD.length; td++ ) {
getTD[td].setAttribute('data-t-date', dataUTCDate[td]);
getTD[td].innerHTML = dataDays[td];
}
}
function getStyleDays(pr_el, pr_data_utc) {
// Call Function click Next | Prev
// Nhận vào Elements [dates], date_utc = [1,2]
var limitdateN = clickEvent( pr_el, pr_data_utc )
var limitEndDate = convertToDateIntegerValue(convertFormatDf(settings.endDate)) || limitdateN;
var toDayElement = pr_el.find('td')
var d_utc = new Date(dataUTC[0]);
d_utc.setHours(0, 0, 0, 0);
var d_utc_co = new Date(dataUTC[1]);
d_utc_co.setHours(0, 0, 0, 0);
var limitRange = new Date(d_utc.getFullYear(), d_utc.getMonth(), d_utc.getDate() + settings.limitDateRanges).valueOf();
var limitRangeCO = new Date(d_utc_co.getFullYear(), d_utc_co.getMonth(), d_utc_co.getDate() - settings.limitDateRanges).valueOf();
for ( var i = 0; i < toDayElement.length; i++ ) {
var dayselect = toDayElement[i].getAttribute('data-t-date');
// t-disabled all days before toDay settings.startDate === toDay
if ( Number(dayselect) < settings.startDate ) {
toDayElement[i].className = 't-disabled';
}
// disable Before Day position t-Check-out
if ( pr_el.hasClass('t-check-out') === true ) {
if ( Number(dayselect) < dataUTC[0] ) {
toDayElement[i].className = 't-disabled';
}
if ( Number(dayselect) > dataUTC[1] || Number(dayselect) >= limitRange ) {
toDayElement[i].className = 't-disabled';
}
// Setlimit Range khi ở t-check-out còn click được 31 ngày default hoặc có thể set limitDateRanges
if ( Number(dayselect) != 0
&& Number(dayselect) > dataUTC[0]
&& Number(dayselect) < limitRange
&& Number(dayselect) != dataUTC[1] ) {
toDayElement[i].className = 't-day';
}
// disable button Arrow Prev when in check-out
if ( Number(dayselect) === dataUTC[0] ) {
var Arrow = pr_el.parent().find('.t-arrow');
Arrow[0].className = Arrow[0].className.replace(' t-disabled', '') + ' t-disabled'
Arrow[0].onclick = function() { return; }
}
// disable button Arrow Next when in check-out
var CI_Arrow = settings.dateCheckIn || toDay; // Case CI = null
var ci_d = new Date(CI_Arrow);
var co_n = new Date(ci_d.getFullYear(), ci_d.getMonth(), ci_d.getDate() + settings.limitDateRanges).valueOf();
if ( $(pr_el).find('[data-t-date="'+ co_n +'"]')[0] !== undefined ) {
var Arrow = pr_el.parent().find('.t-arrow');
Arrow[Arrow.length-1].className = Arrow[Arrow.length-1].className.replace(' t-disabled', '') + ' t-disabled'
Arrow[Arrow.length-1].onclick = function() { return; }
}
}
// tRange In --- Out
if ( Number(dayselect) > dataUTC[0]
&& Number(dayselect) < dataUTC[1]
&& dataUTC[0] >= settings.startDate
&& dataUTC[1] <= limitEndDate ) {
toDayElement[i].className = 't-range';
}
// Limit Day disable for t-check-in 1,2,3 .. months
// limitEndDate <=> settings.endDate
if ( Number(dayselect) > limitEndDate ) {
toDayElement[i].className = 't-disabled';
}
// In - Ative t-check-in
if ( Number(dayselect) === dataUTC[0] ) {
var this_picker = $(toDayElement[i]).parents('.t-datepicker')
if ( this_picker.find('.t-input-check-in').val() !== 'null'
|| settings.toDayHighlighted !== false ) {
toDayElement[i].className = 't-start';
}
}
// Out - Active t-Check-out
if ( Number(dayselect) === dataUTC[1] ) {
var this_picker = $(toDayElement[i]).parents('.t-datepicker')
if ( this_picker.find('.t-input-check-out').val() !== 'null'
|| settings.nextDayHighlighted !== false ) {
toDayElement[i].className = 't-end';
}
}
// t-highlighted toDay
if ( Number(dayselect) === toDay ) {
if ( settings.toDayShowTitle === true || settings.toDayShowTitle === 'true' ) {
// cln = cln.replace('t-special-day', '');
appendSpan(toDayElement[i], 't-hover-day', 't-hover-day-content', settings.titleToday)
toDayElement[i].className = toDayElement[i].className.replace(' t-today', '') + ' t-today';
}
}
// Select stype for day in calendar
var Cn = new Date(Number(dayselect));
Cn.setHours(0, 0, 0, 0);
Cn = Cn.getDay()
// console.log(settings.daysOfWeekHighlighted) // [0,1,2,3,4,5,6]
settings.daysOfWeekHighlighted.forEach( function(e) {
if ( Cn == e ) {
toDayElement[i].className = toDayElement[i].className.replace(' t-highlighted', '') + ' t-highlighted';
}
})
// Click td event when td has been value
toDayElement[i].onclick = function (e) {
e.stopPropagation();
// Check nếu làm t-disabled không làm gì cả
if ( $(this).hasClass('t-disabled') === true ) { return; }
var data_utc_in, data_utc_out;
var get_utc = $(this).attr('data-t-date') // ngày click
// Click calendar ở t-check-out
var datepicker = $(this).parents('.t-check-out');
// get data UTC date
get_utc = Number( get_utc )
if ( $(this).parents('.t-check-in').hasClass('t-check-in') === true ) {
// Check số ngày lớn hơn 12 tháng hoặc limitNextMonth không cho click
if ( Number($(this).attr('data-t-date')) > limitEndDate) { return; }
// selectedCI do something
$(pr_el).trigger('selectedCI', Number(get_utc))
// onChangeCI do something
var setChangeDate = $(this).parents('.t-check-in').find('.t-input-check-in').val();
if ( convertToDateIntegerValue(convertFormatDf(setChangeDate)) != get_utc ) {
$(pr_el).trigger('onChangeCI', Number(get_utc))
}
var d = new Date(dataUTC[1]);
d.setHours(0, 0, 0, 0);
// Giới hạn 30 ngày
var limitdate = new Date(d.getFullYear(), d.getMonth(), d.getDate() - settings.limitDateRanges).valueOf();
data_utc_in = get_utc;
data_utc_out = dataUTC[1];
// Ngăn update nextDate CO nếu click vào ngày toDay, startDatem
// Trường hợp dateCheckIn nhỏ hơn startDate
if ( get_utc === settings.startDate && $(this).hasClass('t-start') === false && dataUTC[0] >= settings.startDate ) {
data_utc_out = dataUTC[0];
}
if ( get_utc > dataUTC[1] || get_utc === dataUTC[1] || get_utc <= limitdate ) {
// Không hiện ngày t-check-out liền kề
data_utc_out = get_utc;
}
if ( $(this).parents('.t-picker-only').hasClass('t-picker-only') === true ) {
data_utc_out = data_utc_in;
}
// Click calendar ở t-check-in chuyển element qua t-check-out
datepicker = $(this).parents('.t-datepicker').find('.t-check-out')
// Chuyển đổi khi không có t-check-out, only calendar for options dateRange === true
if ( datepicker.length === 0 ) {
datepicker = $(this_el).find('.t-picker-only')
// Xoá t-check-out sao khi chọn ngày
setTimeout(function () {
console.log("settings.autoClose=" + settings.autoClose);
if ( $('.t-datepicker-day').length !== 0 && settings.autoClose === true ) {
$('.t-datepicker-day').remove()
$('.t-arrow-top').remove()
}
}, 10 )
}
}
if ( $(this).parents('.t-check-out').hasClass('t-check-out') === true ) {
if ( $(this).hasClass('t-start') === true ) { return; }
// ngăn không cho click ngày t-check-in khi đang ở t-check-out và không có ngày t-check-out
if ( $(this).parents('.t-datepicker').find('.t-start').length === 0
&& $(this).hasClass('t-end') === true ) { return; }
// selectedCO do something
$(pr_el).trigger('selectedCO', Number(get_utc))
// onChangeCO do something
var setChangeDate = $(this).parents('.t-check-out').find('.t-input-check-out').val();
if ( convertToDateIntegerValue(convertFormatDf(setChangeDate)) != get_utc ) {
$(pr_el).trigger('onChangeCO', Number(get_utc))
}
data_utc_in = dataUTC[0];
data_utc_out = get_utc;
$(pr_el).trigger('afterCheckOut', [[data_utc_in, data_utc_out]])
// Xoá t-check-out sao khi chọn ngày
setTimeout(function () {
console.log("settings.autoClose2=" + settings.autoClose);
if ( $('.t-datepicker-day').length !== 0 && settings.autoClose === true ) {
$('.t-datepicker-day').remove()
// $('.t-arrow-top').css({'display': 'none'})
$('.t-arrow-top').remove()
}
}, 10 )
}
// console.log(new Date(data_utc_in))
// console.log(new Date(data_utc_out))
dataUTC = getDateUTC( data_utc_in, data_utc_out )
// eventClickDay do something
$(pr_el).trigger('eventClickDay', [dataUTC])
callEventClick( datepicker, dataUTC )
}
// Function khi hover vào ngày đặc biệt DataEvent Holiday
if ( 'ontouchstart' in window === false ) {
toDayElement[i].onmouseover = function(e) {
// Append special day
if ( $(this).hasClass('t-special-day') === true && $(this).parents('.t-datepicker-day').length != 0) {
$(this).parents('.t-datepicker-day').append('<p class="t-date-title">'+$(this).attr('t-date-title')+'</p>')
}
function checkNumNight(pr_el, pr_date_utc) {
var el_hover = Number($(pr_el).attr('data-t-date'));
var numDay = 0;
if ( e.target.className.indexOf('t-hover-day-content') !== -1
|| e.target.className.indexOf('t-disabled') !== -1 ) {
return;
}
if ( $(pr_el).parents('.t-check-in').hasClass('t-check-in') === true ) {
var nd = new Date(pr_date_utc[1]);
nd.setHours(0, 0, 0, 0);
// Off Hover show title nếu không có set dateCheckIn or dateCheckOut
if ( el_hover === settings.startDate ) {
if ( $(pr_el).parents('.t-check-in').find('.t-end').length === 0
&& $(pr_el).parents('.t-check-in').find('.t-start').length === 0 ) {
nd = new Date(pr_date_utc[0]);
nd.setHours(0, 0, 0, 0);
}
}
var nd_1 = new Date(nd.getFullYear(), nd.getMonth(), nd.getDate()).valueOf();
var limitday = new Date(nd.getFullYear(), nd.getMonth(), nd.getDate() - settings.limitDateRanges).valueOf();
// Ở t-check-in nhỏ hơn hoặc = 30 tính từ ngày t-check-out nếu đã có t-check-out
// Hover vào today và end limitDateRanges
if ( el_hover <= limitday ) {
return;
}
while (el_hover < nd_1) {
nd_1 = new Date(nd.getFullYear(), nd.getMonth(), nd.getDate() - numDay).valueOf();
var t_this = $(pr_el).parents('.t-check-in').find('[data-t-date="' + nd_1 + '"]')[0];
if ( t_this != undefined ) {
t_this.className = t_this.className.replace(' t-range-limit', '') + ' t-range-limit';
}
numDay++;
// console.log(numDay)
if(numDay>1000) {return;}
}
}
if ( $(pr_el).parents('.t-check-out').hasClass('t-check-out') === true ) {
var nd = new Date(pr_date_utc[0]);
nd.setHours(0, 0, 0, 0);
var nd_1 = new Date(nd.getFullYear(), nd.getMonth(), nd.getDate()).valueOf();
var limitday = new Date(nd.getFullYear(), nd.getMonth(), nd.getDate() + settings.limitDateRanges).valueOf();
if ( el_hover >= limitday ) {
return;
}
// Ở t-check-out lớn hơn hoặc = 31 ngày tiếp theo stop
while (el_hover != nd_1) {
nd_1 = new Date(nd.getFullYear(), nd.getMonth(), nd.getDate() + numDay).valueOf();
var t_this = $(pr_el).parents('.t-check-out').find('[data-t-date="' + nd_1 + '"]')[0];
if ( t_this != undefined ) {
t_this.className = t_this.className.replace(' t-range-limit', '') + ' t-range-limit';
}
numDay++;
// console.log(numDay)
if(numDay>5000) {return;}
}
// console.log(numDay)
}
return numDay;
}
// Option dateRangesHover focus only date picker
if ( settings.dateRangesHover === true || settings.dateRangesHover === 'true' ) {
var numDay = checkNumNight(this, dataUTC)
// console.log(numDay)
// options dateRangesShowTitle true|false
if ( settings.dateRangesShowTitle === true ) {
var num_full = 1;
if ( settings.showFullDateRanges === true ) {
num_full = 0;
// Full day always are 2 days
settings.titleDateRange = settings.titleDateRanges;
}
if ( numDay === 2 ) {
// console.log(numDay)
// fn Global - Hover khi ở t-check-in và khi ở t-check-out
appendSpan(this, 't-hover-day', 't-hover-day-content', ((numDay - num_full) + ' ' +settings.titleDateRange) )
} else if ( numDay > 2 ) {
// fn Global - Hover khi ở t-check-in và khi ở t-check-out
appendSpan(this, 't-hover-day', 't-hover-day-content', ((numDay - num_full) + ' '+settings.titleDateRanges) )
}
}
}
this.onmouseout = function() {
// Xoá tất cả các class t-hover-day trừ ngày toDay ra.
if ( this.getElementsByClassName('t-hover-day-content').length != 0 ) {
// IE fix
var node = this.getElementsByClassName('t-hover-day-content')[0]
node.parentNode.removeChild(node);
this.className = this.className.replace(' t-hover-day', '');
}
if ( document.getElementsByClassName('t-range-limit').length != 0 ) {
var a = document.getElementsByClassName('t-range-limit');
a = [].slice.call(a)
for ( var i = 0; i<a.length; i ++ ) {
a[i].className = a[i].className.replace(' t-range-limit', '');
}
}
// Care conflict today vs num night
if ( this.className.indexOf('t-today') !== -1 ) {
if ( this.getElementsByClassName('t-hover-day-content').length != 0 ) {
// this.getElementsByClassName('t-hover-day-content')[0].removeChild();
// IE fix
var node = this.getElementsByClassName('t-hover-day-content')[0]
node.parentNode.removeChild(node);
}
appendSpan(this, 't-hover-day', 't-hover-day-content', settings.titleToday);
this.className = this.className.replace(/\ t-hover-day/g, '') + ' t-hover-day';
}
// out hover hide special days
if ( fnParents(this, 't-datepicker').getElementsByClassName('t-date-title').length != 0 ) {
var elem = fnParents(this, 't-datepicker').getElementsByClassName('t-date-title');
elem = [].slice.call(elem)
for ( var i = 0; i<elem.length; i++ ) {
// elem[i].remove();
// IE fix
elem[i].parentNode.removeChild(elem[i]);
}
}
}
}
}
}
// dateDisabled: ['2019-01-19', '2018-11-05', '2019-01-01',
if ( settings.dateDisabled != undefined) {
var dataDis = settings.dateDisabled;
// return;
// Find number limit month options.numCalendar 1,2,3 ...
for ( var cl = 0; cl < settings.numCalendar; cl++ ) {
var t = new Date(pr_data_utc).getMonth();
var gMonth = t + 1 + cl;
var gYear = new Date(pr_data_utc).getFullYear();
if ( gMonth === 13 ) {
gMonth = gMonth - 12;
gYear = gYear+1;
}
for ( var i = 0; i < toDayElement.length; i++ ) {
// Số ngày của tháng
var getNum = Number(toDayElement[i].textContent)
// Kiểm tra ngày hiện tại với ngày disable
if ( isNaN(getNum) ) {
getNum = new Date(toDay).getDate();
}
// Số ngày của tháng cần so sánh
var getDays = Number(toDayElement[i].getAttribute('data-t-date'));
var getMonths = new Date(getDays).getMonth() + 1;
var key = gYear + '-' + check_num_10(gMonth) + '-' + check_num_10(getNum);
if ( dataDis.indexOf(key) !== -1 && getMonths === gMonth ) {
toDayElement[i].className = toDayElement[i].className+' t-disabled';
}
}
}
}
// set DataEvent Holiday follow Days phai co setdate mới chạy và không cho chạy khi ở tablet
// window.innerWidth > 1024
if ( settings.fnDataEvent != undefined && 'ontouchstart' in window === false ) {
var data = settings.fnDataEvent;
var mergeData = {};
// return;
// Find number limit month options.numCalendar 1,2,3 ...
for ( var cl = 0; cl < settings.numCalendar; cl++ ) {
var t = new Date(pr_data_utc).getMonth();
var gMonth = t + 1 + cl;
var gYear = new Date(pr_data_utc).getFullYear();
if ( gMonth === 13 ) {
gMonth = gMonth - 12;
gYear = gYear+1
}
// function mergeDataEvent use only month not year
if ( settings.mergeDataEvent === true || settings.mergeDataEvent === 'true' ) {
Object.keys(settings.fnDataEvent).map( function(e) {
var t = e.slice(e.length-5, e.length)
if ( t.length < 6 ) {
mergeData[t] = settings.fnDataEvent[e]
}
})
}
for ( var i = 0; i < toDayElement.length; i++ ) {
// Số ngày của tháng
var getNum = Number(toDayElement[i].textContent)
// Kiểm tra ngày hiện tại với ngày đặc biệt để lấy ngày today
if ( isNaN(getNum) ) {
getNum = new Date(toDay).getDate();
}
// Số ngày của tháng cần so sánh
var getDays = Number(toDayElement[i].getAttribute('data-t-date'));
var getMonths = new Date(getDays).getMonth() + 1;
var key = gYear + '-' + check_num_10(gMonth) + '-' + check_num_10(getNum);
if ( settings.mergeDataEvent === true || settings.mergeDataEvent === 'true' ) {
key = check_num_10(gMonth) + '-' + check_num_10(getNum);
data = mergeData;
}
if ( data[key] != undefined && getMonths === gMonth ) {
var cln = toDayElement[i].className;
// cln = cln.replace('t-disabled', '');
toDayElement[i].className = toDayElement[i].className.replace(' t-special-day', '') + ' t-special-day';
// console.log(new Date(getDays).getMonth() + 1)
// console.log(getNum)
toDayElement[i].setAttribute('t-date-title', check_num_10(getNum) + ' ' + settings.titleMonths[new Date(getDays).getMonth()] + ' - ' + data[key])
}
}
}
}
}
function clickEvent(pr_el, pr_data_utc) {
// console.log(pr_el)
// console.log(pr_data_utc)
// console.log(new Date(pr_data_utc[0]) , new Date(pr_data_utc[1]))
// console.log(pr_el)
// console.log(this_el)
var tArrow = pr_el.find('.t-arrow');
// var df_toDay = new Date(toDay);
// console.log(settings.startDate)
var df_toDay = new Date(settings.startDate); // nếu = null thì lấy toDay làm chuẩntuds_change
var end_Date = new Date(convertFormatDf(settings.endDate)) // nếu = null thì lấy setStart làm chuẩn
var limitPrevMonth = new Date(df_toDay.getFullYear(), df_toDay.getMonth() - settings.limitPrevMonth).valueOf();
var limitNextMonth = new Date(end_Date.getFullYear(), end_Date.getMonth()) || new Date(df_toDay.getFullYear(), df_toDay.getMonth() + numCalendar + settings.limitNextMonth).valueOf();
var newDate = new Date(pr_data_utc)
newDate.setHours(0, 0, 0, 0);
var y = newDate.getFullYear();
var m = newDate.getMonth();
var d = newDate.getDate();
if ( tArrow.length != 0 ) {
// Xoá các icons arrow trừ 2 cái đầu và cuối
for ( var i = 1; i < tArrow.length - 1; i++ ) {
tArrow[i].innerHTML = '';
tArrow[i].className = tArrow[i].className.replace(' t-disabled', '') + ' t-disabled';
}
tArrow[0].onclick = function(e) {
e.stopPropagation()
if (new Date(y, m).valueOf() > limitPrevMonth) {
m = m - 1;
// Nhận vào Elements [dates], date_utc = [1,2]
setDaysInMonth(pr_el, new Date(y, m).valueOf())
}
}
// Next Calendar
tArrow[tArrow.length - 1].onclick = function(e) {
e.stopPropagation()
if (new Date(y, m + numCalendar).valueOf() < limitNextMonth) {
m = m + 1;
// Nhận vào Elements [dates], date_utc = [1,2]
setDaysInMonth(pr_el, new Date(y, m).valueOf())
}
}
}
var Arrow_2 = pr_el.find('.t-arrow');
// disable button Arrow when t-check-in limit month
if (new Date(y, m + numCalendar).valueOf() != limitNextMonth && new Date(y, m).valueOf() === limitPrevMonth) {
Arrow_2[Arrow_2.length-1].className = 't-arrow t-next'
Arrow_2[0].className = 't-arrow t-prev t-disabled'
} else {
Arrow_2[0].className = 't-arrow t-prev'
}
if (new Date(y, m + numCalendar).valueOf() === limitNextMonth
|| new Date(new Date(y, m + numCalendar).valueOf()).getMonth() === new Date(dataUTC[0]).getMonth() + 1) {
Arrow_2[Arrow_2.length-1].className = 't-arrow t-next t-disabled'
}
if (new Date(y, m + numCalendar).valueOf() < limitNextMonth) {
// console.log('c')
Arrow_2[Arrow_2.length-1].className = 't-arrow t-next'
}
// return Date.UTC(df_toDay.getFullYear(), df_toDay.getMonth() + numCalendar + settings.limitNextMonth, df_toDay.getDate());
return new Date(df_toDay.getFullYear(), df_toDay.getMonth() + numCalendar + settings.limitNextMonth, df_toDay.getDate()).valueOf();
}
// newDataUTC = getDateUTC(options.dateCheckIn, 1522454400000);
// Function show || Hide calendar [Date]
function getTableCalendar(pr_el, pr_date_utc) {
// console.log(pr_el)
if ( $(pr_el).find('.t-datepicker-day').length !== 0 ) {
$('.t-datepicker-day').remove();
$('.t-arrow-top').css({'display': 'none'})
// Options autoClose
$('html').removeClass('t-datepicker-open')
} else {
if ( $(pr_el).parents('.t-datepicker').hasClass('t-datepicker').length !== 0 ) {
$('.t-datepicker-day').remove();
$('.t-arrow-top').css({'display': 'none'})
}
if ( settings.iconArrowTop === true ) {
var this_el_arrow = $(pr_el).parents('.t-datepicker');
if ( this_el_arrow.find('.t-arrow-top').length === 0 ) {
this_el_arrow.append('<span class="t-arrow-top"></span>')
}
var CI_CO_width = $(pr_el).position().left + $(pr_el).outerWidth()/2
var leftArrTop = this_el_arrow.find('.t-arrow-top').outerWidth()/2
if ( this_el_arrow.find('.t-arrow-top').css('display') === 'block' ) {
this_el_arrow.find('.t-arrow-top').css({
'left': CI_CO_width-leftArrTop+'px'
})
}
this_el_arrow.find('.t-arrow-top').css({'display': 'block'})
this_el_arrow.find('.t-arrow-top').animate({
'left': CI_CO_width-leftArrTop+'px'
}, settings.durationArrowTop)
}
$(pr_el).find('.t-dates').parent().append('<div class="t-datepicker-day'+checkNumCalendar+'"><div class="calendar-container">'+convertArrayToString(dataTheme)+'</div></div>')
// Thêm calendar vào t-check-in hoặc t-check-out
setDaysInMonth($(pr_el).find('.t-dates').parent(), pr_date_utc)
// Options autoClose
$('html').addClass('t-datepicker-open')
}
}
var pr_callback = '';
// var dataUTC = getDateUTC(options.dateCheckIn, options.dateCheckOut);
function callEventClick(pr_callback, pr_date_utc ) {
this_el.find('.t-dates').on('click', function(e) {
// trigger CO or CI
if ( $(e.target).parents('.t-check-in').hasClass('t-check-in') === true ) {
$(e.target).trigger('clickDateCI', [pr_date_utc]);
}
if ( $(e.target).parents('.t-check-out').hasClass('t-check-out') === true ) {
// console.log(pr_date_utc)
$(e.target).trigger('clickDateCO', [pr_date_utc]);
}
// trigger làm gì trước khi show calendar
if ( $('.t-datepicker-day').length === 0 ) {
$(this).trigger('beforeShowDay');
}
// Kiểm tra giá trị của CI === 'null' thì luôn show calendar ở CI
var click = $(this).parent(); // -> .class t-check-in or .t-check-out
if ( $(this).parents('.t-datepicker').find('.t-input-check-in').val() === 'null'
&& $(this).parents('.t-check-out').find('.t-input-check-out').val() === 'null' ) {
click = $(e.target).parents('.t-datepicker').find('.t-check-in');
$(e.target).trigger('clickDateCI', [pr_date_utc]);
}
// Click remove all theme calendar
getTableCalendar(click, pr_date_utc[0])
setTimeout( function(){
if ( $('.t-datepicker-day').length !== 0 ) {
$(e.target).trigger('afterShowDay');
} else {
$(e.target).trigger('toggleAfterHideDay');
}
}, 1 )
})
if ( pr_callback != '' ) {
getTableCalendar(pr_callback, pr_date_utc[0]);
}
}
callEventClick(pr_callback, dataUTC)
// Method show calendar
// Call only
setTimeout( function() {
if ( typeof(pr_el) === 'string' && pr_el === 'show' ) {
if ( this_el.find('.t-datepicker-day').length === 0 ) {
this_el.each(function(e){
if ( settings.iconArrowTop === true ) {
if ( $(this).find('.t-arrow-top').length === 0 ) {
$(this).append('<span class="t-arrow-top"></span>')
}
var CI_width = $(this).find('.t-check-in').outerWidth()
$(this).find('.t-arrow-top').css({
'left' : CI_width/2-10+'px',
'display': 'block'
})
}
// Thêm theme vào đúng calendar cần
$(this).find('.t-check-in').append('<div class="t-datepicker-day'+checkNumCalendar+'"><div class="calendar-container">'+convertArrayToString(dataTheme)+'</div></div>')
// Thêm calendar vào t-check-in hoặc t-check-out
setDaysInMonth($(this).find('.t-check-in'), dataUTC[0])
// Options autoClose
$('html').addClass('t-datepicker-open')
})
}
}
}, 5)
// Call hiden calendar table theme
if ( typeof(pr_el) === 'string' && pr_el === 'hide' ) {
$('html').removeClass('t-datepicker-open')
setTimeout(function(){
$('html').addClass('t-datepicker-open')
}, 5)
}
return this;
}
$('html').on('click', function(e) {
// console.log('html')
if ( $(this).hasClass('t-datepicker-open') === true ) {
// console.log('html')
setTimeout(function () {
// Chờ class t-datepicker-open được khởi tạo ở method 'show'
if ($(e.target).parents('.t-datepicker').hasClass('t-datepicker') === false
&& $('.t-datepicker-day').length > 0) {
$('.t-datepicker-open').removeClass('t-datepicker-open')
$('.t-datepicker-day').remove()
// $('.t-arrow-top').css({'display': 'none'})
$('.t-arrow-top').remove()
// console.log('remove')
}
}, 1);
setTimeout(function () {
//if ($('.calender-dynamic-text').length < 1) {
// // $('.booking-engine .t-datepicker-days:not(.layout2)').prepend('<div class="calender-dynamic-text" style="display:none;"></div>');
//}
// $('.booking-engine .t-datepicker-days:not(.layout2)').prepend('<div class="calender-dynamic-text" style="display:none;"></div>');
}, 10);
}
});
}( jQuery ));
from t-datepicker.
Hello,
@Abhishek2989 i am using your code but i found one error can you please help out from this
Unhandled Rejection (TypeError): update_options.dateCheckIn.setHours is not a function
Unhandled Rejection (TypeError): update_options.dateCheckOut.setHours is not a function
Thanks in advance !!!
from t-datepicker.
@team3rddigital are you using moment.js library?
from t-datepicker.
Issue still exist. negative time zones datepicker calendar dates doesn't show up
from t-datepicker.
Related Issues (20)
- How to disable date after checkin is selected
- Problem if CI > default CO
- How do I prevent the calendar jump?
- t-datepicker issue December 2019 to January 2020
- no support on win8 edge and IE
- Date disabled not work on mobile HOT 1
- Show only calendar without check-in/out, for modal HOT 1
- how you did in demo always opened?
- How to show this data in a button?
- calander not working HOT 1
- timezone issue HOT 3
- setEndDate returns console error.
- How to know how many Sunday between startDate and endDate?
- how to remove disabledates only from checkout date?
- previous next month buttons crash
- Calendar is going to top after selecting any date
- Date picker is not working on new version of Mac OS IE [macOS Ventura - Edge] HOT 1
- On large intervals, select the endDate does not 'jump' to it.
- Navigation
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from t-datepicker.