def create_fold_time(df, frac, date_column):
	"""create splits based on time
	
	Args:
	    df (pd.DataFrame): the dataset dataframe
	    frac (list): list of train/valid/test fractions
	    date_column (str): the name of the column that contains the time info
	
	Returns:
	    dict: a dictionary of splitted dataframes, where keys are train/valid/test and values correspond to each dataframe
	"""
	df = df.sort_values(by = date_column).reset_index(drop = True)
	train_frac, val_frac, test_frac = frac[0], frac[1], frac[2]

	split_date = df[:int(len(df) * (train_frac + val_frac))].iloc[-1][date_column]
	test = df[df[date_column] >= split_date].reset_index(drop = True)
	train_val = df[df[date_column] < split_date]

	split_date_valid = train_val[:int(len(train_val) * train_frac/(train_frac + val_frac))].iloc[-1][date_column]
	train = train_val[train_val[date_column] <= split_date_valid].reset_index(drop = True)
	valid = train_val[train_val[date_column] > split_date_valid].reset_index(drop = True)

	return {'train': train, 'valid': valid, 'test': test, 'split_time': {'train_time_frame': (df.iloc[0][date_column], split_date_valid), 
                                                                         'valid_time_frame': (split_date_valid, split_date), 
                                                                         'test_time_frame': (split_date, df.iloc[-1][date_column])}}