含记事功能的日历

上一篇 / 下一篇  2008-07-28 21:14:02

  • 文件大小: 1 KB
  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: asp/html/php

记事功能的日历


编号:033

拷贝下面的代码到你的html文件的<body>和</body>之间

<script>
<!--

// Copyright (c) 1996-1997 Tomer Shiran. All rights reserved.
// Permission given to use the script. provided that this notice remains as is.
// Additional scripts can be found athttp://www.geocities.com/~yehuda/

//
// Cookie functions to store and retrieve cookies
//

// Boolean variable specified if alert should be displayed if cookie exceeds 4KB
var caution = false

// name - name of the cookie
// value - value of the cookie
// [expires] - expiration date of the cookie (defaults to end of current session)
// [path] - path for which the cookie is valid (defaults to path of calling document)
// [domain] - domain for which the cookie is valid (defaults to domain of calling document)
// [secure] - Boolean value indicating if the cookie transmission requires a secure transmission
// * an argument defaults when it is assigned null as a placeholder
// * a null placeholder is not required for trailing omitted arguments
function setCookie(name, value, expires, path, domain, secure) {
    var curCookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "")
    if (!caution || (name + "=" + escape(value)).length <= 4000)
        document.cookie = curCookie
    else
        if (confirm("Cookie exceeds 4KB and will be cut!"))
            document.cookie = curCookie
}

// name - name of the desired cookie
// * return string containing value of specified cookie or null if cookie does not exist
function getCookie(name) {
    var prefix = name + "="
    var cookieStartIndex = document.cookie.indexOf(prefix)
    if (cookieStartIndex == -1)
        return null
    var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
    if (cookieEndIndex == -1)
        cookieEndIndex = document.cookie.length
    return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex))
}

// name - name of the cookie
// [path] - path of the cookie (must be same as path used to create cookie)
// [domain] - domain of the cookie (must be same as domain used to create cookie)
// * path and domain default if assigned null or omitted if no explicit argument proceeds
function deleteCookie(name, path, domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        "; expires=Thu, 01-Jan-70 00:00:01 GMT"
    }
}

// date - any instance of the Date object
// * you should hand all instances of the Date object to this function for "repairs"
// * this function is taken from Chapter 14, "Time and Date in JavaScript", in "Learn Advanced JavaScript. Programming"
function fixDate(date) {
    var base = new Date(0)
    var skew = base.getTime()
    if (skew > 0)
        date.setTime(date.getTime() - skew)
}

function initCookie(monthName) {
    // initializes cookie with the following format:
    // ^1^^2^^3^^4^...^30^^31^

    // initialize accumulative variable
    var text = ""
    for (var i = 1; i <= 31; ++i) {
        text += "^" + i + "^"
    }

    var now = new Date()
    fixDate(now)

    // set time to one month (31 days) in the future
    now.setTime(now.getTime() + 1000 * 60 * 60 * 24 * 31)

    setCookie(monthName + "Calendar", text, now)
}

function getSpecificReminder(num, monthName) {
    var prefix = "^" + num + "^"
    var totalCookie = getCookie(monthName + "Calendar")
    var startIndex = totalCookie.indexOf(prefix, 0)
    var startData = totalCookie.indexOf("^", startIndex + 1) + 1
    if (num == 31)
        var endData = totalCookie.length
    else
        var endData = totalCookie.indexOf("^", startData)

    return totalCookie.substring(startData, endData)
}

function setSpecificReminder(num, monthName, newValue) {
    var prefix = "^" + num + "^"
    var totalCookie = getCookie(monthName + "Calendar")
    var startIndex = totalCookie.indexOf(prefix, 0)
    var startData = totalCookie.indexOf("^", startIndex + 1) + 1
        if (num == 31)
        var endData = totalCookie.length
    else
        var endData = totalCookie.indexOf("^", startData)
    var now = new Date()
    fixDate(now)

    // set time to one month (31 days) in the future
    now.setTime(now.getTime() + 1000 * 60 * 60 * 24 * 31)

    setCookie(monthName + "Calendar", totalCookie.substring(0, startData) + newValue + totalCookie.substring(endData, totalCookie.length), now)
}

function getInput(num, monthName) {
    if (!getCookie(monthName + "Calendar"))
        initCookie(monthName)
    var newValue = prompt("Enter reminder for current date:", getSpecificReminder(num, monthName))
    if (newValue) // user did not cancel
        setSpecificReminder(num, monthName, newValue)
}

function getTime() {
    // initialize time-related variables with current time settings
    var now = new Date()
    var hour = now.getHours()
    var minute = now.getMinutes()
    now = null
    var ampm = ""

    // validate hour values    and set value of ampm
    if (hour >= 12) {
        hour -= 12
        ampm = "PM"
    } else
        ampm = "AM"
    hour = (hour == 0) ? 12 : hour

    // add zero digit to a one digit minute
    if (minute < 10)
        minute = "0" + minute // do not parse this number!

    // return time string
    return hour + ":" + minute + " " + ampm
}

function leapYear(year) {
    if (year % 4 == 0) // basic rule
        return true // is leap year
    return false // is not leap year
}

function getDays(month, year) {
    // create array to hold number of days in each month
    var ar = new Array(12)
    ar[0] = 31 // January
    ar[1] = (leapYear(year)) ? 29 : 28 // February
    ar[2] = 31 // March
    ar[3] = 30 // April
    ar[4] = 31 // May
    ar[5] = 30 // June
    ar[6] = 31 // July
    ar[7] = 31 // August
    ar[8] = 30 // September
    ar[9] = 31 // October
    ar[10] = 30 // November
    ar[11] = 31 // December

    // return number of days in the specified month (parameter)
    return ar[month]
}

function getMonthName(month) {
    // create array to hold name of each month
    var ar = new Array(12)
    ar[0] = "January"
    ar[1] = "February"
    ar[2] = "March"
    ar[3] = "April"
    ar[4] = "May"
    ar[5] = "June"
    ar[6] = "July"
    ar[7] = "August"
    ar[8] = "September"
    ar[9] = "October"
    ar[10] = "November"
    ar[11] = "December"

    // return name of specified month (parameter)
    return ar[month]
}

function setCal() {
    // standard time attributes
    var now = new Date()
    var year = now.getYear()
    var month = now.getMonth()
    var monthName = getMonthName(month)
    var date = now.getDate()
    now = null

    // create instance of first day of month, and extract the day on which it occurs
    var firstDayInstance = new Date(year, month, 1)
    var firstDay = firstDayInstance.getDay()
    firstDayInstance = null

    // number of days in current month
    var days = getDays(month, year)

    // call function to draw calendar
    drawCal(firstDay + 1, days, date, monthName, 1900 + year)
}

function drawCal(firstDay, lastDate, date, monthName, year) {
    // constant table settings
    var headerHeight = 50 // height of the table's header cell
    var border = 2 // 3D height of table's border
    var cellspacing = 4 // width of table's border
    var headerColor = "midnightblue" // color of table's header
    var headerSize = "+3" // size of tables header font
    var colWidth = 60 // width of columns in table
    var dayCellHeight = 25 // height of cells containing days of the week
    var dayColor = "darkblue" // color of font representing week days
    var cellHeight = 40 // height of cells representing dates in the calendar
    var todayColor = "red" // color specifying today's date in the calendar
    var timeColor = "purple" // color of font representing current time

    // create basic table structure
    var text = "" // initialize accumulative variable to empty string
    text += '<CENTER>'
    text += '<TABLE BORDER=' + border + ' CELLSPACING=' + cellspacing + '>' // table settings
    text +=     '<TH COLSPAN=7 HEIGHT=' + headerHeight + '>' // create table header cell
    text +=         '<FONT COLOR="' + headerColor + '" SIZE=' + headerSize + '>' // set font for table header
    text +=              monthName + ' ' + year
    text +=         '</FONT>' // close table header's font settings
    text +=     '</TH>' // close header cell

    // variables to hold constant settings
    var penCol = '<TD WIDTH=' + colWidth + ' HEIGHT=' + dayCellHeight + '>'
    openCol += '<FONT COLOR="' + dayColor + '">'
    var closeCol = '</FONT></TD>'

    // create array of abbreviated day names
    var weekDay = new Array(7)
    weekDay[0] = "Sun"
    weekDay[1] = "Mon"
    weekDay[2] = "Tues"
    weekDay[3] = "Wed"
    weekDay[4] = "Thu"
    weekDay[5] = "Fri"
    weekDay[6] = "Sat"

    // create first row of table to set column width and specify week day
    text += '<TR ALIGN="center" VALIGN="center">'
    for (var dayNum = 0; dayNum < 7; ++dayNum) {
        text += openCol + weekDay[dayNum] + closeCol
    }
    text += '</TR>'

    // declaration and initialization of two variables to help with tables
    var digit = 1
    var curCell = 1

    for (var row = 1; row <= Math.ceil((lastDate + firstDay - 1) / 7); ++row) {
        text += '<TR ALIGN="right" VALIGN="top">'
        for (var col = 1; col <= 7; ++col) {
            if (digit > lastDate)
                break
            if (curCell < firstDay) {
                text += '<TD></TD>';
                curCell++
            } else {
                if (digit == date) { // current cell represent today's date
                    text += '<TD HEIGHT=' + cellHeight + '>'
                    text += '<FONT COLOR="' + todayColor + '">'
                    text += '<A HREF="javascript.:getInput(' + digit + ', \'' + monthName + '\')" nMouseOver="window.status = \'Store or retrieve data for ' + monthName + ' ' + digit + '\'; return true"><FONT COLOR="' + todayColor + '">' + digit + '</FONT></A>'
                    text += '<BR>'
                    text += '<FONT COLOR="' + timeColor + '" SIZE=2>'
                    text += '<CENTER>' + getTime() + '</CENTER>'
                    text += '</FONT>'
                    text += '</TD>'
                } else
                    text += '<TD HEIGHT=' + cellHeight + '><A HREF="javascript.:getInput(' + digit + ', \'' + monthName + '\')" nMouseOver="window.status = \'Store or retrieve data for ' + monthName + ' ' + digit + '\'; return true">' + digit + '</A></TD>'
                digit++
            }
        }
        text += '</TR>'
    }

    // close all basic table tags
    text += '</TABLE>'
    text += '</CENTER>'

    // print accumulative HTML string
    document.write(text)
}

setCal()

// -->
</script>

说明:这个日历使用了cookie,点击日期,可以输入某天需要提醒的事情,到时间再点击此日期,会显示出你的记录。

 

TAG: 记事 日历

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

关于作者