у меня была аналогичная ситуация, и я использовал приведенный ниже код для того, чтобы это сработало.
Aspose.Cells.LoadOptions loadOptions = new Aspose.Cells.LoadOptions(Aspose.Cells.LoadFormat.CSV);
Workbook workbook = new Workbook(fstream, loadOptions);
Worksheet worksheet = workbook.Worksheets[0];
dt = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxDisplayRange.RowCount, worksheet.Cells.MaxDisplayRange.ColumnCount, true);
DataTable dtCloned = dt.Clone();
ArrayList myAL = new ArrayList();
foreach (DataColumn column in dtCloned.Columns)
{
if (column.DataType == Type.GetType("System.DateTime"))
{
column.DataType = typeof(String);
myAL.Add(column.ColumnName);
}
}
foreach (DataRow row in dt.Rows)
{
dtCloned.ImportRow(row);
}
foreach (string colName in myAL)
{
dtCloned.Columns[colName].Convert(val => DateTime.Parse(Convert.ToString(val)).ToString("MMMM dd, yyyy"));
}
/*******************************/
public static class MyExtension
{
public static void Convert<T>(this DataColumn column, Func<object, T> conversion)
{
foreach (DataRow row in column.Table.Rows)
{
row[column] = conversion(row[column]);
}
}
}
Надеюсь, это поможет some1 thx_joxin
Вы можете получить время следующими способами:
Если нужно, могу написать пример скрипта.
ОБНОВЛЕНИЕ:
<!DOCTYPE html>
<html>
<head>
<title>Collect time</title>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(function()
{
var start = null;
$(window).load(function(event) {
start = event.timeStamp;
});
$(window).unload(function(event) {
var time = event.timeStamp - start;
$.post('/collect-user-time/ajax-backend.php', {time: time});
})
});
</script>
</head>
<body>
</body>
</html>
И внутренний скрипт:
<?php
$time = intval($_POST['time']);
if (!file_exists('data.txt')) {
file_put_contents('data.txt', $time . "\n");
} else {
file_put_contents('data.txt', $time . "\n", FILE_APPEND);
}
Но, как я уже сказал, он не будет работать в браузере Opera
На самом деле нет эффективного способа сделать это с помощью PHP, поскольку PHP является серверным и не дает возможности определить, когда страница была закрыта. Чтобы определить это, вам нужно использовать javascript.
Я бы использовал javascript, чтобы запустить таймер на window.onload
, а затем завершить таймер на window.onunload
. Затем вы можете хранить данные и делать с ними все, что хотите.
Основной способ, который я могу придумать:
Когда пользователь впервые открывает страницу, вы регистрируете, скажем, его IP-адрес, загруженную страницу и время.Затем, используя некоторые Javascript и AJAX, когда они покидают страницу, вы используете событие unload
для отправки обработчику AJAX, который записывает страницу и когда они уходят.
Вам нужно будет использовать какой-то идентификатор, помимо сеанса, для сохранения посещения страницы. Скажем, у меня открыто 5 экземпляров домашней страницы, вы хотите зарегистрировать каждый из них по отдельности. Итак, что-то вроде этого:
index.php
code: 2345
)Если они посещают index.php
, вы должны сгенерировать другой код, скажем, 36789
. Лучше всего использовать что-то, что генерирует случайный GUID, поэтому вы можете (по существу) игнорировать любые возможности коллизий в одной и той же комбинации IP/страницы/кода.